嗶哩嗶哩2019筆試題--聚會


小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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM