模板目錄
阿新 • • 發佈:2018-01-21
目錄 post targe aps cin esp tdi get 初始化
P3367 【模板】並查集
代碼如下 :
#include <iostream> #include<cstdio> #include<cmath> #include<cstring> #include<string> using namespace std; int f[10050],n,m; void init()//初始化,每個元素的上級就是自己 { int i; for(i=1;i<=n;i++) f[i]=i; } int find(int x)//查找元素的上級並路徑壓縮。View Code{ if(f[x]==x) return x; return f[x]=find(f[x]); } int Find(int x) //非遞歸路徑壓縮 { int r=x; while(r!=f[r]) r=f[r]; int i=x,j; while(f[i]!=r) { j=f[i]; f[i]=r; i=j; } return r; } voidHB(int x,int y)//合並集合,如果兩個集合不在一個大集合裏就合並 { int t1=Find(x); int t2=Find(y); if(t1!=t2) f[t2]=t1; } int main() { cin>>n>>m; init(); //初始化元素 int z,x,y; for(int i=1;i<=m;i++)//邊輸入邊合並或判斷 { cin>>z>>x>>y;if(z==1) HB(x,y); if(z==2) { // if(f[x]==f[y]) cout<<"Y"<<endl;//失敗 ,有一個元素沒路徑壓縮 if(Find(x)==Find(y)) cout<<"Y"<<endl;//成功 ,但增加時間 else cout<<"N"<<endl; } } //for(int i=1;i<=n;i++)//測試用 //cout<<f[i]<<endl; return 0; }
模板目錄