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 ...