并查集就是建立联系;
开始的时候自己的终端就是自己;
我们随机输入两个数字;
不断地去寻找联系的终端;
如果终端相同就停止;
如果终端不同就建立他们的联系;
`#include<stdio.h>
int p[1000000];
int fin(int x)
{
return x==p[x]?x:p[x]=fin(p[x]);//这一个就是用来寻找终端
}
int coy(int x,int y)//给两个建立联系
{int xx=fin(x);
int yy=fin(y);
if(xx!=yy)
return p[xx]=yy;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)//定义出他们的,,他们自己就是自己的终端
{
p[i]=i;
}
for(int i=0;i<m;i++)
{int a,b;
scanf("%d%d",&a,&b);
coy(a,b);//建立联系//
}
int t=0;
for(int i=0;i<n;i++)
{
if(fin(0)==fin(i))
t++;
}//判断感染数,,感染数就是指他们终端同样为0;
printf("%d\n",t);
}
我这里也是刚开始学,,以后会完善的
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1073