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