1 solutions

  • 0
    @ 2025-11-27 11:59:02

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    const int MAX_N = 3e2 + 9;
    
    int n, q, f[MAX_N], m, x, num[MAX_N];
    
    void dfs(int x)
    {
        num[x]++; // num[i]:记录编号i访问的次数
        if (f[x] == -1)  return;
        dfs(f[x]);
    }
    int main()
    {
        cin >> n;
        f[0] = -1;   //根结点的直接领导
        for (int i = 1; i <= n - 1; i++)
            cin >> f[i]; // 编号为i的员工的直接领导为f[i]
        cin >> q;
        while (q--) // q场合作需要安排
        {
            cin >> m; // 合作的员工的数量
            memset(num , 0 , sizeof(num));
            for (int i = 1; i <= m; i++)
            {
                cin >> x; // 参与合作的员工编号
                dfs(x);
            }
            for(int i = n - 1; i >= 0; i--)  //编号从大到小
            {
                if(num[i] == m)  //编号为i访问了m次 说明i能够管理者m个合作的员工
                {
                    cout << i << endl;
                    break;
                }
            }
        }
        return 0;
    }
    
    
    • 1

    Information

    ID
    119
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By