Codeforces Round #479 (Div. 3), problem: (E) Cyclic Components 【dfs】

题意

求单圈环的个数【单圈环就是只有一个圈的环】

思路

观察单圈环的可以发现它的一个性质每个点的度都是2,所以

【方法一】只需要用dfs遍历一下所有连在一起点,查看点的度是不是为2

code

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=2e5+5;
vector<int> G[maxn];
int vis[maxn];
int n,m;
int ff;
void dfs(int u,int root){
    vis[u]=1;
    if(G[u].size()!=2) ff=0;
    for(auto v:G[u]){
        if(v==root || vis[v]) continue;
        dfs(v,u);
    }
}
int main(){
    cin>>n>>m;
    int u,v;
    int cnt=0;
    for(int i=0;i<m;i++){
        cin>>u>>v;
        G[u].push_back(v);
        G[v].push_back(u);
    }
    for(int i=1;i<=n;i++){
        ff=1;
        if(!vis[i]){
            dfs(i,-1);
            if(ff) cnt++;
        }
    }
    cout<<cnt<<endl;
    return 0;
}
学如逆水行舟,不进则退
发布了412 篇原创文章 · 获赞 971 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weixin_42429718/article/details/104105088