1. 程式人生 > >模板目錄

模板目錄

目錄 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)//查找元素的上級並路徑壓縮。 
{ 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; } void
HB(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; }
View Code

模板目錄