题目描述
啊!几经周折.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 = 1050; 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 = 1;i <= n;i++){ f[i] = i; sz[i] = 1; } int x,y,fx,fy; for(int i = 1;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 = 0; for(int i = 1;i <= n;i++){ if(ans < sz[i]) ans = sz[i]; } cout<<ans; return 0; } #include<iostream> using namespace std; int father[1001]; 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[1001]={0}; int ans=0; int n,m; int x,y; cin>>n>>m; for(int i=1;i<=n;i++) { father[i]=i; } for(int i=1;i<=m;i++) { cin>>x>>y; un(find(x),find(y)); } for(int i=1;i<=n;i++) { a[find(i)]++; ans=max(a[find(i)],ans); } cout<<ans; //system("pause"); return 0; }