题意:
找到所有的单链环的个数
思路:
dfs 遍历整个图,每次把一个连通块标记出来,并判读是否每个点的度数都为2(是否为单链环);
#include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<iostream> #include<vector> using namespace std; typedef long long ll; const int maxn = 2e5+7; int n, m, f; bool vis[maxn]; vector<int> vec[maxn]; void dfs(int id) { vis[id]=1; if(vec[id].size() != 2) f = 0; for(auto i : vec[id]){ if(vis[i]) continue; dfs(i); } return; } int main() { cin >> n >> m; for(int i = 0; i < m; ++i) { int u, v; cin>>u>>v; vec[u].push_back(v); vec[v].push_back(u); } int ans = 0; for(int i = 1; i <= n; ++i){ if(!vis[i]) { f = 1; dfs(i); if(f) ans++; } } cout<<ans; return 0; }