并查集模板 && 带权并查集模板
不带权:
1 int f[50050]; 2 void init(void) 3 { 4 for(int i=1;i<=n;i++) 5 f[i]=i; 6 } 7 int fd(int x) 8 { 9 return f[x]==x?x:fd[x]=fd(f[x]); 10 } 11 int uion(int x,int y) 12 { 13 int fa=fd(x),fb=fd(y); 14 if(fa!=fb)f[fa]=fb; 15 }
带权:
1 int f[K],rl[K]; 2 3 void init(void) 4 { 5 for(int i=1;i<=n;i++) 6 f[i]=i; 7 } 8 int fd(int x) 9 { 10 if(f[x]==x) return x; 11 int fa=f[x]; 12 f[x]=fd(f[x]); 13 rl[x]=(rl[x]+rl[fa])%2; 14 return f[x]; 15 } 16 void join(int x,int y,int op) 17 { 18 int fx=fd(x),fy=fd(y); 19 if(fx==fy)return; 20 f[fy]=fx; 21 rl[fy]=(op+rl[x]+rl[y])%2; 22 }
作者:weeping
出处:www.cnblogs.com/weeping/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。