hdoj1232---畅通工程
2018-01-25 13:43
405 查看
hdoj1232-----题目传送门
#include <stdio.h>
int pre[1005];//用于存放父亲节点
int find(int x)
{
//如果代表元是自己则返回自己,否则调用递归pre[x],
//并且把代表元进行更新
return pre[x]==x?x:(pre[x]=find(pre[x]));
}
//合并
void mer(int x,int y)
{
x=find(x);
y=find(y);
if(x<y) pre[x]=y;
else if(x>y) pre[y]=x;
}
int main()
{
int n,m,i,x,y,count;
while(scanf("%d",&n)&&n)
{
scanf("%d",&m);
for(i=1;i<=n;i++)
{
pre[i]=i;
}
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
mer(x,y);
}
count=0;
//代表元是自身的是祖先节点
for(i=1;i<=n;i++)
{
if(pre[i]==i) count++;
}
printf("%d\n",count-1);
// for(i=1;i<=n;i++)
// {
// printf("%d %d %d\n",i,pre[i],find(i));
// }
}
return 0;
}
#include <stdio.h>
int pre[1005];//用于存放父亲节点
int find(int x)
{
//如果代表元是自己则返回自己,否则调用递归pre[x],
//并且把代表元进行更新
return pre[x]==x?x:(pre[x]=find(pre[x]));
}
//合并
void mer(int x,int y)
{
x=find(x);
y=find(y);
if(x<y) pre[x]=y;
else if(x>y) pre[y]=x;
}
int main()
{
int n,m,i,x,y,count;
while(scanf("%d",&n)&&n)
{
scanf("%d",&m);
for(i=1;i<=n;i++)
{
pre[i]=i;
}
for(i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
mer(x,y);
}
count=0;
//代表元是自身的是祖先节点
for(i=1;i<=n;i++)
{
if(pre[i]==i) count++;
}
printf("%d\n",count-1);
// for(i=1;i<=n;i++)
// {
// printf("%d %d %d\n",i,pre[i],find(i));
// }
}
return 0;
}
相关文章推荐
- HDOJ1232 畅通工程 【并查集】
- HDOJ 1232 畅通工程 杭电 ACM
- HDOJ 1232 畅通工程 (并查集)
- HDOJ 1232 畅通工程
- ACM HDOJ 1232 (畅通工程 )
- HDOJ 1232 畅通工程(并查集)
- HDOJ 1232 畅通工程
- hdu/hdoj 1232 畅通工程---并查集
- HDOJ 1232:畅通工程 并查集求解子图的个数
- HDOJ 1232 畅通工程
- HDOJ 题目1232 畅通工程(并查集)
- HDOJ 1232 畅通工程
- HDOJ 1232 畅通工程解题报告
- HDOJ 1232 畅通工程
- HDOJ 畅通工程 JAVA 1232
- HDOJ 1232 畅通工程 (并查集)
- HDoj-1232-畅通工程-并查集
- hdoj-1232 畅通工程【并查集】
- HDOJ 1232.畅通工程
- hdoj 1232 畅通工程【并查集】