您的位置:首页 > 其它

并查集

2016-07-23 09:59 232 查看
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <math.h>
#include <queue>
#define MAXN 100010
#define inf 0x3f3f3f3f

using namespace std;
int uset[MAXN];
int deep[MAXN];//深度
void init(){
for(int i = 0; i < MAXN; ++i){
uset[i] = i;
}
memset(deep,0,sizeof(deep));
}
int found(int x){
return x==uset[x]?x:uset[x] = found(uset[x]);
}
int main()
{
int n,m;
int x,y;
while(~scanf("%d",&n)){
init();
scanf("%d",&m);
while(m--){
scanf("%d%d",&x,&y);
int xx = found(x);
int yy = found(y);
if(xx != yy){
uset[xx] = yy;
/*加个深度优化
if(deep[xx] > deep[yy]){
uset[y] = x;
}
else{
uset[x] = y;
if(deep[xx] == deep[yy]){
++deep[yy];
}
}
*/
}
}
for(int i = 1; i <= n; ++i){
x = found(i);
cout<<x<<endl;
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: