1 条题解

  • 0
    @ 2026-5-5 22:07:13

    让我们针对给定图中的每个连通分量分别解决此问题。

    容易看出,一个连通分量是环,当且仅当其中每个顶点的度数都等于 22

    因此,解法是计算满足「分量中每个顶点的度数都为 22」的连通分量的个数。

    图中的连通分量可以通过简单的 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
    上传者