标签:hdu 并查集 1856 more is better
4 1 2 3 4 5 6 1 6 4 1 2 3 4 5 6 7 8
4 2HintA and B are friends(direct or indirect), B and C are friends(direct or indirect), then A and C are also friends(indirect). In the first sample {1,2,5,6} is the result. In the second sample {1,2},{3,4},{5,6},{7,8} are four kinds of answers.
这也是一个并查序的问题,问的是friends最多有多少个,其实就是计算ranks的最大值。
#include<iostream>
#include<stdio.h>
using namespace std;
#define M 10000010
int ranks[M];//一开始还以为空间不够,结果这题给的空间很大
int pre[M];
int _find(int node)
{
int t=node;
if(node==pre[node])return node;
else
return pre[node]=_find(pre[node]);
}
int _union(int a,int b)
{
int p=_find(a);
int q=_find(b);
if(p!=q)
{
if(ranks[p]<ranks[q]){pre[p]=q;
ranks[q]+=ranks[p];}
else{
pre[q]=p;
ranks[p]+=ranks[q];
}
}
}
int main(int argc, char *argv[])
{
//freopen("1856.in","r",stdin);
int n;
int a,b;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<M;++i)
{
pre[i]=i;
ranks[i]=1;
}
while(n--)
{
scanf("%d %d",&a,&b);
_union(a , b);
}
int max=0;
for(int i=1;i<M;++i)
{
if(ranks[i]>max)max=ranks[i];
}
printf("%d\n",max);
}
return 0;
}
标签:hdu 并查集 1856 more is better
原文地址:http://blog.csdn.net/wdkirchhoff/article/details/41758861