답안 #1076408

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1076408 2024-08-26T13:39:23 Z ArthuroWich 열대 식물원 (Tropical Garden) (IOI11_garden) C++17
100 / 100
1307 ms 76368 KB
#include "garden.h"
#include "gardenlib.h"
#include<bits/stdc++.h>
using namespace std;
int n, m, p, ans = 0;
vector<int> adj[150005], radj[300005];
int succ[300005][31], vis1[300005], vis2[300005], dep1[300005], dep2[300005], cyc1 = -1, cyc2 = -1;
void initsucc() {
    for (int j = 1; j < 31; j++) {
        for (int i = 0; i <= 2*n; i++) {
            succ[i][j] = succ[succ[i][j-1]][j-1];
        }
    }
}
void calc(int a, int k) {
    for (int i = 0; i < 31; i++) {
        if (k & (1 << i)) {
            a = succ[a][i];
        }
    }
    if (a == p || a == p+n) {
        ans++;
    }
}
void dfs1(int i, int st, int d) {
    if (vis1[i] && st == i && cyc1 == -1) {
        cyc1 = d;
        return;
    }
    if (vis1[i]) {
        return;
    }
    vis1[i] = 1;
    dep1[i] = d;
    for (int j : radj[i]) {
        dfs1(j, st, d+1);
    }
}
void dfs2(int i, int st, int d) {
    if (vis2[i] && st == i && cyc2 == -1) {
        cyc2 = d;
        return;
    }
    if (vis2[i]) {
        return;
    }
    vis2[i] = 1;
    dep2[i] = d;
    for (int j : radj[i]) {
        dfs2(j, st, d+1);
    }
}
void count_routes(int N, int M, int P, int R[][2], int Q, int G[]) {
    n = N, m = M, p = P;
    for (int i = 0; i < m; i++) {
        if (adj[R[i][0]].size() < 2) {
            adj[R[i][0]].push_back(R[i][1]);
        }
        if (adj[R[i][1]].size() < 2) {
            adj[R[i][1]].push_back(R[i][0]);
        }
    }
    for (int i = 0; i < n; i++) {
        if (adj[i].size() == 1) {
            if (i == adj[adj[i][0]][0]) {
                succ[i][0] = adj[i][0]+n;
            } else {
                succ[i][0] = adj[i][0];
            }
            succ[i+n][0] = succ[i][0];
        } else {
            if (i == adj[adj[i][0]][0]) {
                succ[i][0] = adj[i][0]+n;
            } else {
                succ[i][0] = adj[i][0];
            }
            if (i == adj[adj[i][1]][0]) {
                succ[i+n][0] = adj[i][1]+n;
            } else {
                succ[i+n][0] = adj[i][1];
            }
        }
    }
    initsucc();
    if (Q == 1) {
        ans = 0;
        for (int i = 0; i < n; i++) {
            calc(i, G[0]);
        }
        answer(ans);
        return;
    } 
    for (int i = 0; i < 2*n; i++) {
        radj[succ[i][0]].push_back(i);
    }
    dfs1(p, p, 0);
    dfs2(p+n, p+n, 0);
    for (int j = 0; j < Q; j++) {
        ans = 0;
        for (int i = 0; i < n; i++) {
            bool f1 = 0, f2 = 0;
            int k = G[j];
            if (vis1[i]) {
                k -= dep1[i];
                if (k == 0) {
                    f1 = 1;
                } else if (cyc1 != -1 && k % cyc1 == 0) {
                    f1 = 1;
                }
            }
            k = G[j];
            if (vis2[i]) {
                k -= dep2[i];
                if (k == 0) {
                    f2 = 1;
                } else if (cyc2 != -1 && k % cyc2 == 0) {
                    f2 = 1;
                }
            }
            if (f1 || f2) {
                ans++;
            }
        }
        answer(ans);
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 11096 KB Output is correct
2 Correct 5 ms 11100 KB Output is correct
3 Correct 6 ms 11100 KB Output is correct
4 Correct 5 ms 10844 KB Output is correct
5 Correct 5 ms 10844 KB Output is correct
6 Correct 5 ms 11100 KB Output is correct
7 Correct 5 ms 10844 KB Output is correct
8 Correct 6 ms 11100 KB Output is correct
9 Correct 6 ms 11364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 11096 KB Output is correct
2 Correct 5 ms 11100 KB Output is correct
3 Correct 6 ms 11100 KB Output is correct
4 Correct 5 ms 10844 KB Output is correct
5 Correct 5 ms 10844 KB Output is correct
6 Correct 5 ms 11100 KB Output is correct
7 Correct 5 ms 10844 KB Output is correct
8 Correct 6 ms 11100 KB Output is correct
9 Correct 6 ms 11364 KB Output is correct
10 Correct 4 ms 10844 KB Output is correct
11 Correct 16 ms 17500 KB Output is correct
12 Correct 26 ms 22108 KB Output is correct
13 Correct 54 ms 35944 KB Output is correct
14 Correct 92 ms 50696 KB Output is correct
15 Correct 85 ms 51288 KB Output is correct
16 Correct 64 ms 38692 KB Output is correct
17 Correct 52 ms 34384 KB Output is correct
18 Correct 26 ms 22104 KB Output is correct
19 Correct 90 ms 50760 KB Output is correct
20 Correct 100 ms 51536 KB Output is correct
21 Correct 64 ms 38480 KB Output is correct
22 Correct 49 ms 34376 KB Output is correct
23 Correct 101 ms 55044 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 11096 KB Output is correct
2 Correct 5 ms 11100 KB Output is correct
3 Correct 6 ms 11100 KB Output is correct
4 Correct 5 ms 10844 KB Output is correct
5 Correct 5 ms 10844 KB Output is correct
6 Correct 5 ms 11100 KB Output is correct
7 Correct 5 ms 10844 KB Output is correct
8 Correct 6 ms 11100 KB Output is correct
9 Correct 6 ms 11364 KB Output is correct
10 Correct 4 ms 10844 KB Output is correct
11 Correct 16 ms 17500 KB Output is correct
12 Correct 26 ms 22108 KB Output is correct
13 Correct 54 ms 35944 KB Output is correct
14 Correct 92 ms 50696 KB Output is correct
15 Correct 85 ms 51288 KB Output is correct
16 Correct 64 ms 38692 KB Output is correct
17 Correct 52 ms 34384 KB Output is correct
18 Correct 26 ms 22104 KB Output is correct
19 Correct 90 ms 50760 KB Output is correct
20 Correct 100 ms 51536 KB Output is correct
21 Correct 64 ms 38480 KB Output is correct
22 Correct 49 ms 34376 KB Output is correct
23 Correct 101 ms 55044 KB Output is correct
24 Correct 6 ms 11096 KB Output is correct
25 Correct 66 ms 19024 KB Output is correct
26 Correct 91 ms 24144 KB Output is correct
27 Correct 728 ms 51796 KB Output is correct
28 Correct 702 ms 59604 KB Output is correct
29 Correct 829 ms 60284 KB Output is correct
30 Correct 443 ms 44132 KB Output is correct
31 Correct 470 ms 39732 KB Output is correct
32 Correct 99 ms 24280 KB Output is correct
33 Correct 734 ms 58964 KB Output is correct
34 Correct 828 ms 60264 KB Output is correct
35 Correct 453 ms 44112 KB Output is correct
36 Correct 802 ms 39764 KB Output is correct
37 Correct 531 ms 62504 KB Output is correct
38 Correct 1307 ms 76368 KB Output is correct