답안 #913909

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
913909 2024-01-20T13:25:31 Z VMaksimoski008 Regions (IOI09_regions) C++14
0 / 100
1416 ms 131072 KB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int maxn = 2e5 + 5;

void setIO() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}

int n, r, q, dp[501][maxn], i, timer = 0, in[maxn], out[maxn], r1, r2, ans;
short home[maxn];
vector<vector<int> > graph;

void dfs(int u) {
    dp[home[u]][u]++;

    for(int &v : graph[u]) {
        dfs(v);
        for(i=1; i<=r; i++)
            dp[i][u] += dp[i][v];
    }
}

void dfs2(int u) {
    in[u] = timer++;

    for(int &v : graph[u])
        dfs2(v);

    out[u] = timer;
}

bool anc(int u, int v) { return (in[u] <= in[v] && out[u] >= out[v]); }

int32_t main() {
    setIO();

    cin >> n >> r >> q;
    graph.resize(n+1);
    vector<int> cnt(r+1);

    cin >> home[1];
    cnt[home[1]]++;

    for(i=2; i<=n; i++) {
        int p;
        cin >> p >> home[i];
        cnt[home[i]]++;
        graph[p].push_back(i);
    }

    if(r <= 500) {
        dfs(1);

        vector<vector<int> > by_home(r+1);
        for(i=1; i<=n; i++)
            by_home[home[i]].push_back(i);

        while(q--) {
            cin >> r1 >> r2;

            for(int &x : by_home[r1])
                ans += dp[r2][x];
        
            cout << ans << '\n';
            cout.flush();
        }
        return 0;
    }

    int mx = 0;
    for(i=1; i<=n; i++) mx = max(mx, cnt[i]);

    if(mx <= 500) {
        dfs2(1);
        vector<vector<int> > by_home(r+1);
        for(i=1; i<=n; i++)
            by_home[home[i]].push_back(i);

        while(q--) {
            cin >> r1 >> r2;
            ans = 0;

            for(int &u : by_home[r1])
                for(int &v : by_home[r2])
                    ans += anc(u, v);

            cout << ans << '\n';
            cout.flush();
        }

        return 0;
    }

    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 4440 KB Output isn't correct
2 Incorrect 2 ms 8536 KB Output isn't correct
3 Incorrect 3 ms 12632 KB Output isn't correct
4 Incorrect 5 ms 16984 KB Output isn't correct
5 Incorrect 7 ms 29272 KB Output isn't correct
6 Incorrect 30 ms 130504 KB Output isn't correct
7 Incorrect 16 ms 24408 KB Output isn't correct
8 Incorrect 31 ms 83828 KB Output isn't correct
9 Runtime error 25 ms 131072 KB Execution killed with signal 9
10 Incorrect 90 ms 51032 KB Output isn't correct
11 Incorrect 85 ms 56412 KB Output isn't correct
12 Runtime error 28 ms 131072 KB Execution killed with signal 9
13 Incorrect 194 ms 94544 KB Output isn't correct
14 Incorrect 136 ms 47696 KB Output isn't correct
15 Runtime error 30 ms 131072 KB Execution killed with signal 9
# 결과 실행 시간 메모리 Grader output
1 Runtime error 40 ms 131072 KB Execution killed with signal 9
2 Incorrect 1416 ms 108492 KB Output isn't correct
3 Runtime error 39 ms 131072 KB Execution killed with signal 9
4 Incorrect 6 ms 3996 KB Unexpected end of file - int32 expected
5 Incorrect 7 ms 4440 KB Unexpected end of file - int32 expected
6 Incorrect 10 ms 4968 KB Unexpected end of file - int32 expected
7 Incorrect 16 ms 5960 KB Unexpected end of file - int32 expected
8 Incorrect 17 ms 8280 KB Unexpected end of file - int32 expected
9 Incorrect 31 ms 10712 KB Unexpected end of file - int32 expected
10 Incorrect 40 ms 12416 KB Unexpected end of file - int32 expected
11 Incorrect 42 ms 11308 KB Unexpected end of file - int32 expected
12 Incorrect 40 ms 12984 KB Unexpected end of file - int32 expected
13 Incorrect 49 ms 12444 KB Unexpected end of file - int32 expected
14 Incorrect 44 ms 12364 KB Unexpected end of file - int32 expected
15 Incorrect 37 ms 13952 KB Unexpected end of file - int32 expected
16 Incorrect 39 ms 13704 KB Unexpected end of file - int32 expected
17 Incorrect 43 ms 14396 KB Unexpected end of file - int32 expected