题目描述
啊!几经周折.mty终于找到了他的偶像.他就是….fyc!
可是fyc这样的高级人士可不喜欢一个人总是缠着他.于是他出了一道难题想考考mty.fyc有几个手下:陈乐天,舒步鸡,胡巍……现在fyc要去和别人fight,需要组建一值军队.军队的士兵在fyc的手下里选.
要组建一个军队,必修满足军队中的每个人之间都有直接或间接的朋友关系.
那么mty现在需要组建一支在满足上述情况下的人数最多的军队.
问题规模:
对于100%的数据,1<=n<=1000,1<=m<=500.
输入格式第一行,两个数,n,m.(n表示fyc有几个手下m表示有m对朋友关系).
一下m行,每行两个数.x[i],y[i].表示编号为x[i],y[i]的人是朋友.
输出格式一个数,表示人数最多的军队的人数.
样例输入
5 3
1 2
2 3
3 4
样例输出
4
说明:1,2,3,4可组成一直军队.
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = ;
int n,m;
int f[maxn],sz[maxn];
int findf(int x){
return x == f[x] ? x : f[x] = findf(f[x]);
}
int main(){
cin>>n>>m;
for(int i = ;i <= n;i++){
f[i] = i;
sz[i] = ;
}
int x,y,fx,fy;
for(int i = ;i <= m;i++){
scanf("%d%d",&x,&y);
fx = findf(x);
fy = findf(y);
if(fx == fy) continue; //notice
if(sz[fx] > sz[fy]) swap(fx,fy);
sz[fy] += sz[fx];
f[fx] = fy;
}
int ans = ;
for(int i = ;i <= n;i++){
if(ans < sz[i]) ans = sz[i];
}
cout<<ans;
return ;
} #include<iostream>
using namespace std;
int father[];
int find(int x)
{
if(x!=father[x])father[x]=find(father[x]);
return father[x];
}
void un(int f,int z)
{
father[z]=f;
}
int main()
{
int a[]={};
int ans=;
int n,m;
int x,y;
cin>>n>>m;
for(int i=;i<=n;i++)
{
father[i]=i;
}
for(int i=;i<=m;i++)
{
cin>>x>>y;
un(find(x),find(y));
}
for(int i=;i<=n;i++)
{
a[find(i)]++;
ans=max(a[find(i)],ans);
}
cout<<ans;
//system("pause");
return ;
}