3 solutions

  • 1
    @ 2025-10-9 15:44:20
    #include <iostream>
    #include <vector>
    #include <cstring>
    using namespace std;
    
    const int MAX = 200050;
    int c[MAX], p[MAX], n, m, q, x;
    bool vis[MAX];
    
    int dfs(int u) {
        if (vis[c[u]]) return 1;
        vis[c[u]] = true;
        return 1 + dfs(p[u]);
    }
    
    int main() {
        ios::sync_with_stdio(0);
        cin.tie(0);
        
        cin >> n >> m;
        for (int i = 1; i <= n; i++) cin >> c[i];
        for (int i = 1; i <= n; i++) cin >> p[i];
        
        cin >> q;
        while (q--) {
            cin >> x;
            memset(vis, 0, sizeof(vis));
            cout << dfs(x) << '\n';
        }
    }
    
    

    Information

    ID
    573
    Time
    2000ms
    Memory
    512MiB
    Difficulty
    10
    Tags
    (None)
    # Submissions
    8
    Accepted
    3
    Uploaded By