题解 | #畅通工程#

畅通工程

https://www.nowcoder.com/practice/4878e6c6a24e443aac5211d194cf3913

#include <iostream>
using namespace std;
int n;
//x为下标
int getFather(int arr[],int x){
    while(arr[x] !=-1){
        x = arr[x];
    }
    return x;
}
void joint(int arr[],int a,int b){
    int aFather = getFather(arr,a);
    int bFather = getFather(arr,b);
    if(aFather == bFather)return;
    arr[aFather] = bFather;
}
int main() {
    int m;//n个城镇,m条路
    while(cin>>n>>m){
        int towns[n+1];//0丢弃,编号1-n
        for(int i =0;i<=n;i++)towns[i]=-1;//都为独立节点
        int a,b;
        while(m--){
            cin>>a>>b;
            joint(towns,a,b);
        }
        int count=-1;
        for(int i=1;i<=n;i++)
            if(towns[i]==-1)count++;
        cout<<count<<endl;
    }
}
// 64 位输出请用 printf("%lld")

并查集的应用

全部评论

相关推荐

11-02 09:49
已编辑
货拉拉_测试(实习员工)
热爱生活的仰泳鲈鱼求你们别卷了:没事楼主,有反转查看图片
点赞 评论 收藏
分享
面试摇了我吧:啊哈哈面试提前五个小时发,点击不能参加就是放弃
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务