Codeforces Round #479 (Div. 3) E. Cyclic Components (思维,DFS)
Posted lr599909928
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #479 (Div. 3) E. Cyclic Components (思维,DFS)相关的知识,希望对你有一定的参考价值。
-
题意:给你(n)个顶点和(m)条边,问它们有多少个单环(无杂环),例如图中第二个就是一个杂环.
-
题解:不难发现,如果某几个点能够构成单环,那么每个点一定只能连两条边.所以我们先构建邻接表,然后从某个数开始跑dfs,如果这一边所有点的度数都为(2),那么就能构成一个单环.
-
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #include <unordered_set> #include <unordered_map> #define ll long long #define fi first #define se second #define pb push_back #define me memset const int N = 1e6 + 10; const int mod = 1e9 + 7; using namespace std; typedef pair<int,int> PII; typedef pair<long,long> PLL; int n,m; int u,v; bool st[N]; bool ok=1; vector<int> V[N]; void dfs(int x){ st[x]=true; if(V[x].size()!=2) ok=0; for(auto w:V[x]){ if(!st[w]) dfs(w); } } int main() { ios::sync_with_stdio(false);cin.tie(0); cin>>n>>m; while(m--){ cin>>u>>v; V[u].pb(v); V[v].pb(u); } int ans=0; for(int i=1;i<=n;++i){ ok=1; if(!st[i]){ dfs(i); if(ok) ans++; } } printf("%d ",ans); return 0; }
以上是关于Codeforces Round #479 (Div. 3) E. Cyclic Components (思维,DFS)的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #479 (Div. 3)题解
Codeforces Round #479 (Div. 3) 题解
Codeforces Round #479 (Div. 3)解题报告
[CF977X]Codeforces Round #479 (Div. 3)
Codeforces Round #479 (Div. 3) E. Cyclic Components (思维,DFS)
Codeforces Round #479 (Div. 3) D. Divide by three, multiply by two