離線 並查集 Mootube

2021-09-10 06:42:25 字數 1570 閱讀 9045

mootube

描述給定一顆n個節點的樹,定義兩點距離為他們之間路徑中邊權最小值。

q次詢問k,v,詢問到v距離》=k的點有多少(不含v)

輸入第一行兩個整數n,q。

接下來n-1行,每行3個整數u,v,w表示u,v之間有條路徑,長為w

接下來q組詢問,每組詢問2個整數k,v

輸出q行回答詢問

樣例輸入

4 31 2 3

2 3 2

2 4 4

1 24 1

3 1樣例輸出30

2提示對於30%的資料,1≤n,q≤1000。

對於70%的資料,1≤n≤2000,q≤10^5。

對於100%的資料,1≤n,q≤105, 1≤w,k≤109.

analysis

tips

一般這種和邊權最值有關的題,都可以用並查集

code

#include

#define in read()

#define re register

using

namespace std;

inline

intread()

return f==

1?res:

-res;

}const

int n=

100005

;struct nodee[n]

;struct aska[n]

;inline

bool

cmp1

(const node &a,

const node &b)

inline

bool

cmp2

(const ask &a,

const ask &b)

int n,q;

int fa[n]

,sze[n]

,ans[n]

;inline

intgetfa

(int x)

inline

void

getans()

if(fu==fv)

continue

; fa[fu]

=fv;sze[fv]

+=sze[fu];}

while

(k<=q) ans[a[k]

.id]

=sze[

getfa

(a[k]

.d)]-1

,k++;}

intmain()

sort

(e+1

,e+n,cmp1)

;for

(re int i=

1;i<=q;

++i)

sort

(a+1

,a+q+

1,cmp2)

;getans()

;for

(re int i=

1;i<=q;

++i)

printf

("%d\n"

,ans[i]);

return0;

}

LCA Tarjin 並查集 離線

以前了解的tarjin演算法是用來求連通分量,在這裡是用來求最近公共祖先 並查集用過,很有意思的工具。kraskal演算法是並查集最經典的應用。首先初始化集合,每個元素為單個集合。集合,我們需要選出乙個代表,這個代表的性質是set u u。一開始乙個集合只有乙個元素,所以該集合的代表也就是該元素。當...

題解 history(離線並查集)

今天考試很水,ssw023道題都寫的正解,然而不注重細節。1or 1寫成 1 連通塊最大值不更新 t3就是這道細節題 description 歷史學家小 正在研究乙個奇怪的王國的歷史。當前階段的任務是研究該國的交通。根據這個奇怪的王國的史書記載,史書開始記載前這個王國有 n 個城市 城市從 0 開 ...

並查集 並查集

本文參考了 挑戰程式設計競賽 和jennica的github題解 陣列版 int parent max n int rank max n void init int n int find int x else void union int x,int y else 結構體版 struct node ...