http://blog.csdn.net/dellaserss/article/details/7724401
超赞的博文,看完后并查集基本过过过!
附几道相关题目
bjfu 1064
#include<stdio.h>
#include<string.h>
int pre[10000];
int find(int x)
{
int r=x;
while (pre[r ]!=r)
r=pre[r ];
int i=x; int j;
while(i!=r)
{
j=pre[i ];
pre[i ]=r;
i=j;
}
return r;
}
int main()
{
int n,m,t,i,j,s,f1,f2,p1,p2;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(pre,-1,sizeof(pre));
for(i=0;i<n;i++)
{
pre[i]=i;
}
while(m--)
{
scanf("%d%d",&p1,&p2);
f1=find(p1);
f2=find(p2);
if(f1!=f2)
{
pre[f2]=f1;
}
}
int max=1;
for(i=0;i<n;i++)
{
s=0;
for(j=0;j<n;j++)
{
if(find(i)==find(j))
s++;
}
if(s>max)
max=s;
}
printf("%d\n",max);
}
return 0;
}
#include<string.h>
int pre[10000];
int find(int x)
{
int r=x;
while (pre[r ]!=r)
r=pre[r ];
int i=x; int j;
while(i!=r)
{
j=pre[i ];
pre[i ]=r;
i=j;
}
return r;
}
int main()
{
int n,m,t,i,j,s,f1,f2,p1,p2;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(pre,-1,sizeof(pre));
for(i=0;i<n;i++)
{
pre[i]=i;
}
while(m--)
{
scanf("%d%d",&p1,&p2);
f1=find(p1);
f2=find(p2);
if(f1!=f2)
{
pre[f2]=f1;
}
}
int max=1;
for(i=0;i<n;i++)
{
s=0;
for(j=0;j<n;j++)
{
if(find(i)==find(j))
s++;
}
if(s>max)
max=s;
}
printf("%d\n",max);
}
return 0;
}
#include<stdio.h>
#include<string.h>
int pre[10000];
int find(int x)
{
int r=x;
while (pre[r ]!=r)
r=pre[r ];
int i=x; int j;
while(i!=r)
{
j=pre[i ];
pre[i ]=r;
i=j;
}
return r;
}
int main()
{
int n,m,i,f1,f2,p1,p2;
while(scanf("%d",&n)!=EOF)
{
int s=n;
memset(pre,0,sizeof(pre));
for(i=1;i<=n;i++)
{
pre[i]=i;
}
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&p1,&p2);
f1=find(p1);
f2=find(p2);
if(f1!=f2)
{
pre[f2]=f1;
s--;
}
}
if(s==0)
printf("yes!\n");
else
printf("sorry!\n");
}
return 0;
}
#include<string.h>
int pre[10000];
int find(int x)
{
int r=x;
while (pre[r ]!=r)
r=pre[r ];
int i=x; int j;
while(i!=r)
{
j=pre[i ];
pre[i ]=r;
i=j;
}
return r;
}
int main()
{
int n,m,i,f1,f2,p1,p2;
while(scanf("%d",&n)!=EOF)
{
int s=n;
memset(pre,0,sizeof(pre));
for(i=1;i<=n;i++)
{
pre[i]=i;
}
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&p1,&p2);
f1=find(p1);
f2=find(p2);
if(f1!=f2)
{
pre[f2]=f1;
s--;
}
}
if(s==0)
printf("yes!\n");
else
printf("sorry!\n");
}
return 0;
}