1 条题解
-
0
让我们针对给定图中的每个连通分量分别解决此问题。
容易看出,一个连通分量是环,当且仅当其中每个顶点的度数都等于 。
因此,解法是计算满足「分量中每个顶点的度数都为 」的连通分量的个数。
图中的连通分量可以通过简单的 DFS 或 BFS 轻松找到。
#include <bits/stdc++.h> using namespace std; const int N = 200 * 1000 + 11; int n, m; int deg[N]; bool used[N]; vector<int> comp; vector<int> g[N]; void dfs(int v) { used[v] = true; comp.push_back(v); for (auto to : g[v]) if (!used[to]) dfs(to); } int main() { #ifdef _DEBUG freopen("input.txt", "r", stdin); // freopen("output.txt", "w", stdout); #endif scanf("%d %d", &n, &m); for (int i = 0; i < m; ++i) { int x, y; scanf("%d %d", &x, &y); --x, --y; g[x].push_back(y); g[y].push_back(x); ++deg[x]; ++deg[y]; } int ans = 0; for (int i = 0; i < n; ++i) { if (!used[i]) { comp.clear(); dfs(i); bool ok = true; for (auto v : comp) ok &= deg[v] == 2; if (ok) ++ans; } } printf("%d\n", ans); return 0; }
- 1
信息
- ID
- 6963
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者