您的位置:首页 > 其它

并查集-hdu1232

2016-11-02 00:32 274 查看
并查集的水题,模板一套,基本什么都不用改。

代码如下:

#include <stdio.h>
#define MAXN 1010
int root[MAXN], ans;
int Find(int x)
{
while(x != root[x])
{
x = root[x];
}
return x;
}
void Union(int x, int y)
{
x = Find(x);
y = Find(y);
if(x != y)
{
root[x] = y;
ans --;     //每连通一个,道路数就该减1
}

}
int main()
{
int N, M;
int s1, s2;
while(scanf("%d", &N),N)
{
scanf("%d", &M);
ans = N-1;
for(int i = 1; i <= N; i++)  //i应该从1开始,不然N点找不到root初始化的值,这里有点小坑。。。WA了几次
{
root[i] = i;
}
for(int i = 0; i < M; i++)
{
scanf("%d %d", &s1, &s2);
Union(s1, s2);
}
printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: