/*
并查集
这个题目要注意的是如何记录每个集合的元素个数
只要通过建立每个集合的基结点
然后要用基结点bon[i]来记录元素个数
*/
#include<iostream>
using namespace std;
int bin[10000002], bon[10000002];
int find_(int t)
{
if(bin[t] != t)
bin[t] = find_(bin[t]);
return bin[t];
}
void with(int a, int b)
{
int x, y;
x = find_(a);
y = find_(b);
if(x != y)
{
if(bon[x] >= bon[y])
{
bin[y] = x;
bon[x]+= bon[y];//记录基结点x的所有子结点数
}
else
{
bin[x] = y;
bon[y]+= bon[x];
}
}
}
int main()
{
int n;
while(cin >> n)
{
for(int i = 1; i <= 10000000; i++)
{
bin[i] = i;
bon[i] = 1;
}
while(n--)
{
int a, b;
cin >> a >> b;
with(a,b);
}
int sum = -1;
for(int i = 1; i <= 10000000; i++)//一定要从1比较到10000000
if(sum < bon[i]) sum = bon[i];
cout << sum << endl;
}
return 0;
}
HDU 1856 并查集
最新推荐文章于 2019-01-04 19:52:58 发布