小A參加了一個n人的活動,每個人都有一個唯一編號i(i>=0 & i<n),其中m對相互認識,在活動中兩個人可以通過互相都認識的一個人介紹認識。現在問活動結束后,小A最多會認識多少人?
算法:並查集
#include<iostream> #include<algorithm> #include<vector> using namespace std; vector<int>f; int find(int x){ return x==f[x]?x:f[x]=find(f[x]); } int main(void){ int n,idx,m; cin>>n>>idx>>m; f=vector<int>(n); for(int i=0;i<n;i++)f[i]=i; int ans(0),b(0); while(m--){ int one, two; scanf("%d,%d", &one, &two); if(one==idx||two==idx)b++; int fx=find(one),fy=find(two); if(fx!=fy)f[fx]=fy; } for(int i=0;i<n;i++) if(find(idx)==find(i))ans++; cout<<ans-b-1<<endl; return 0; }
