CodeForces

题:https://codeforces.com/problemset/problem/977/E

题意:给你一个图,问你有几个没有杂边的单环(度全为2)

分析:单环点的度数一定是2,连续边,判断是否连通,如果连通,ans++,否则连接这个边

#include<bits/stdc++.h>
using namespace std;
const int M=1e6+6;
int f[M],a[M],b[M],du[M];
int findd(int x){
    return x==f[x]?x:f[x]=findd(f[x]);
}
int main(){
    int n,m,ans=0;
    ios::sync_with_stdio(false);
    cin>>n>>m;
    for(int i=0;i<=n;i++)
        f[i]=i;
    for(int i=1;i<=m;i++){
        cin>>a[i]>>b[i];
        du[a[i]]++;
        du[b[i]]++;
    }
    for(int i=1;i<=m;i++){
        if(du[a[i]]==2&&du[b[i]]==2){
            int x=findd(a[i]),y=findd(b[i]);
            if(x==y)
                ans++;
            else
                f[y]=x;
        }
        //cout<<"!!"<<endl;
    }
    cout<<ans<<endl;
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/starve/p/12258178.html