首页 > 其他 > 详细

哔哩哔哩2019笔试题--聚会

时间:2019-07-07 20:57:23      阅读:132      评论:0      收藏:0      [点我收藏+]

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

 

哔哩哔哩2019笔试题--聚会

原文:https://www.cnblogs.com/programyang/p/11147576.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!