1 条题解

  • 0
    @ 2025-6-22 16:40:47

    深搜砸摄像头

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN = 500;
    int n, m;
    vector<int> e[MAXN + 5];
    // 当前位置被几个摄像头监视(实际上就是入度)
    int cnt[MAXN + 5];
    // flag[pos] 记录 pos 位置有没有摄像头
    bool flag[MAXN + 5];
    void dfs(int u)
    {
        for (int i = 0; i < e[u].size(); i++)
        {
            int v = e[u][i];
            if (!flag[v]) // 没摄像头的位置就不用管了
                continue;
            cnt[v]--;
            if (cnt[v] == 0)
                dfs(v);
        }
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            int u, m, v;
            cin >> u;
            flag[u] = true; // 标记这个位置有摄像头
            cin >> m;
            for (int j = 1; j <= m; j++)
            {
                cin >> v;
                e[u].push_back(v);
                cnt[v]++;
            }
        }
        for (int i = 1; i <= 500; i++)
            if (cnt[i] == 0 && flag[i])
                dfs(i);
        int ans = 0;
        for (int i = 1; i <= 500; i++)
            if (cnt[i] == 0 && flag[i])
                ans++;
        if (ans == n)
            cout << "YES\n";
        else
            cout << n - ans;
        return 0;
    }
    
    

    信息

    ID
    3520
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    递交数
    4
    已通过
    2
    上传者