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