這個題一開始就是用tarjan求一下dfn和low,作用就是縮點,把沒用的點全部縮成同乙個,首先割邊就是一棵樹的樹枝,所以在詢問的時候將兩個點連起來減掉的割邊就是各自到最近公共祖先的全部邊,並查集用在這裡主要意義是看他們是否在乙個環中,每個環自己是乙個集合。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
vectortu[100001];
int dfn[100001], low[100001], clj, jc, die[100001], bcj[100001], zouguo[100001],qiao[100001];
int zhao(int x)
void hebing(int a, int b)
void tarjan(int dian, int ba)
while (dfn[q]> n >> m)
tarjan(1, 0);
//cout << jc << endl;
cin >> k;
printf("case %d:\n", ++u);
for (int a = 1; a <= k; a++)
cout << endl;
}return 0;
}
LCA法寶 並查集
由於我也是看懂的,突然發現這篇部落格特別的好!lca 最近公共祖先 我相信你現在肯定自己就可以打 了!另外注意,這裡的 f 陣列其實是用了並查集的思想 並查集詳解 倍增 inline void dfs int x,int s,int chang for reg int i 0 i g x size ...
3910 火車 LCA 並查集
在樹上走顯然是求lca,然後每次走完把端點到lca路徑上的點都用並查集合並,之後如果判斷兩點所屬集合相等說明已經走過。倍增被鏈剖虐成狗系列 include include define n 500005 define ll long long using namespace std int n,m,...
POJ並查集小結
並查集小結 並查集大體分為三個 普通的並查集,帶種類的並查集,擴充套件的並查集 主要是必須指定合併時的父子關係,或者統計一些資料,比如此集合內的元素數目。poj 1182 經典的種類並查集 poj 1308 用並查集來判斷一棵樹。注意空樹也是樹,死人也是人。poj 1611 裸地水並查集 poj 1...