Codeforces Round #600 (Div. 2) D。 Harmonious Graph

  

#include<iostream>
using namespace std ;
const int N=200200;
int p[N];
int cnt;
int find(int x) {
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}
int main() {
    int n,m;
    cin>>n>>m;
    for(int i=1; i<=n; i++) p[i]=i;
    for(int i=1; i<=m; i++) {
        int a,b;
        cin>>a>>b;
        int A=find(a),B=find(b);
        if(A>B) swap(A,B);//大的当die
        p[A]=B;
    }
    for(int i=1; i<=n; i++) {
        int x =find(i);
        while(i<x) {
            int y=find(i);
            if(x!=y) {
                cnt++;
                if(y>x) swap(x,y);
                p[y]=x;
            }
            i++;
        }
    }
    cout<<cnt<<endl;
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/QingyuYYYYY/p/11930373.html