内存限制:128 MB
时间限制:1.000 S
评测方式:文本比较
命题人:admin
提交:6
解决: ?
输入小计是一个程序员,他为学校做了一个校园聊天系统,已知系统中有 n 名用户,编号为 1~n,现在已知有 m 对好友关系,每一对关系由两个整数 x 和 y 组成 ,表示编号为 x 的用户和编号为 y 的用户是一对好友,请问校园中有多少个圈子,人数最多的圈子有多少人。
圈子:一个圈子中的人一定直接与同圈子的其他人是好友,或者通过若干名同圈子的人,间接与同圈子的其他人是好友。
输入:第一行有两个整数 n,m;
接下来 m 行,每行两个整数,表示好友信息。
输出:两行,两个整数,分别为校园中圈子的数量,人数最多圈子的人数。
【数据说明】
对于100%数据,1<n<=100,1<m<=5000。
#include<bits/stdc++.h>
using namespace std;
int a[1001],b[1001],c[100001],d[100001]={0};
int main() {
bool flag;
int n,m,maxn;
int t=0,w=0;
cin>>n>>m;
for(int i=0; i<m; i++) {
cin>>a[i]>>b[i];
t++;
flag=false;
if(i==0) {
c[a[i]]=w;
c[b[i]]=w;
w++;
continue;
} else {
for(int j=0; j<t-1; j++) {
if(a[i]==a[j]||a[i]==b[j]||b[i]==b[j]||b[i]==a[j]) {
c[a[i]]=c[a[j]];
c[b[i]]=c[b[j]];
flag=true;
}
}
}
if(flag==false){
c[a[i]]=w;
c[b[i]]=w;
w++;
}
}
for(int i=0;i<w;i++)
for(int j=1;j<=n;j++){
if(c[j]==i){
d[i]+=1;
}
}
maxn=d[1];
for(int i=0;i<w;i++){
if(maxn<d[i]){
maxn=d[i];
}
}
cout<<w<<" "<<maxn;
return 0;
}