1014. Circles of Friends (35)

来源:互联网 发布:js display none 编辑:程序博客网 时间:2024/06/06 15:49

感想:无向图!!不是有向图,我被坑了两个小时

DFS+并查集


#include<iostream>#include<vector>#include<map>#include<deque>#include<cstdio>#include<string>#include<cstring>#include<algorithm>using namespace std;int N,ans2=0;int ma[1010][1010];int b[1010];int isread[1010]={0};deque<int> q;int find(int i){if(b[i]==0)return i;return b[i]=find(b[i]);}int BFS(int i){int MM=1,x,j;for(j=0;j<=N;j++)isread[j]=0;q.push_back(i);isread[i]=1;while(!q.empty()){x=q.front();q.pop_front();for(j=0;j<ma[x][1005];j++){if(isread[ma[x][j]]==0){q.push_back(ma[x][j]);isread[ma[x][j]]=isread[x]+1;}}}for(j=1;j<=N;j++){if(isread[j]>MM)MM=isread[j];}return MM;}void unino(int i,int j){if(find(i)!=find(j))b[find(i)]=find(j);}int main(){int i,j,temp,ans1=0,K;cin>>N;for(i=0;i<1010;i++){b[i]=0;for(j=0;j<1010;j++)ma[i][j]=0;}for(i=1;i<=N;i++){cin>>K;for(j=0;j<K;j++){cin>>temp;unino(i,temp);ma[i][ma[i][1005]++]=temp;ma[temp][ma[temp][1005]++]=i;}}for(i=1;i<=N;i++){ans2=max(ans2,BFS(i));if(b[i]==0)ans1++;}cout<<ans1<<" "<<max(ans2-2,0)<<endl;}


0 0