找根-传染问题

《找根-传染问题》

#include <stdio.h>

#include <algorithm>

#include <iostream>

#include <math.h>

#include <string>

#include <cstring>

#include <vector>

using namespace std;

#define MAX 50001

int r[MAX];

int getf(int r[],int i) //归并集 重点

{

    if(r[i]==i) return i;

    else

    {

    r[i]=getf(r,r[i]);

    return r[i];

    }

}

int main()

{

    int num,rel;

    while(cin>>num>>rel)

    {

         int a,b;

         int sum=0;

        for(int i=0;i<MAX;i++) r[i]=i; //各自为根

        for(int i=0;i<rel;i++)

        {

            cin>>a>>b;

            if(a<b) r[b]=a;   //找小根

            else r[a]=b;

        }

        for(int i=0;i<num;i++) r[i]=getf(r,i); //找大根

        for(int i=0;i<num;i++) if(r[i]==0) sum++;

        cout<<sum<<endl;

    }

    return 0;

}

    原文作者:传染病问题
    原文地址: https://blog.csdn.net/Galahad_LLLLLL/article/details/60347134
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞