并查集水题,题意将直接或间接是朋友的放在一个房间,问一共需要多少房间,代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX = 10000001;
int father[MAX], num[MAX];
int n;
void init()
{
for(int i=0; i<MAX; ++i)
{
father[i] = i;
num[i] = 1;
}
}
int fin(int x)
{
return x==father[x] ? x : father[x]=fin(father[x]);
}
void comb(int a, int b)
{
int pa = fin(a), pb = fin(b);
if(pa != pb)
{
father[pa] = pb;
num[pb] += num[pa];
num[pa] = 0;
}
}
void per()
{
int Max = 0;
for(int i=0; i<MAX; ++i)
{
if(Max < num[i])
Max = num[i];
}
cout << Max << endl;
}
int main()
{
while(~scanf("%d", &n))
{
int a, b, c = n;
init();
while(c--)
{
scanf("%d%d", &a, &b);
comb(a, b);
}
per();
}
return 0;
}