답안 #1058245

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1058245 2024-08-14T09:05:27 Z Triseedot 참나무 (IOI23_beechtree) C++17
9 / 100
2000 ms 15824 KB
// In honor of El Psy Congroo
#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
#include <debug.h>
#else
#define debug(...)
#endif

using ll = long long;
#define all(v) v.begin(), v.end()
#define len(v) int(v.size())

vector<int> beechtree(int N, int M, vector<int> P, vector<int> C) {
    vector<vector<int>> g(N);
    for (int u = 1; u < N; u++) {
        int v = P[u];
        g[v].push_back(u);
    }
    
    auto compress = [] (vector<int> &a) {
        int n = len(a);
        vector<pair<int, int>> b(n);
        for (int i = 0; i < n; i++) {
            b[i] = {a[i], i};
        }
        sort(all(b));
        int curr = 0;
        for (int i = 0; i < n; i++) {
            if (i != 0 && b[i].first != b[i - 1].first) curr++;
            a[b[i].second] = curr;
        }
    };
    compress(C);
    
    vector<bool> bad(N, false);
    for (int v = 0; v < N; v++) {
        vector<int> cnt(N, 0);
        for (int u : g[v]) {
            if (cnt[C[u]]) bad[v] = true;
            cnt[C[u]]++;
        }
    }
    
    vector<int> cnt(N, 0), cnt_leaf(N, 0);
    vector<vector<int>> q(N + 1);
    auto calc = [&] (int root) {
        int curr = 0;
        function<void(int)> calc_cnt = [&] (int v) {
            if (len(g[v]) == 0) {
                cnt_leaf[C[v]]++;
            }
            for (int u : g[v]) {
                if (cnt[C[u]] == 0) curr++;
                cnt[C[u]]++;
                calc_cnt(u);
            }
        };
        function<void(int)> reset = [&] (int v) {
            cnt[C[v]] = 0;
            cnt_leaf[C[v]] = 0;
            q[len(g[v])].clear();
            for (int u : g[v]) {
                reset(u);
            }
        };
        calc_cnt(root);
        
        q[len(g[root])].push_back(root);
        while (!q[curr].empty() && curr > 0) {
            int v = q[curr].back();
            q[curr].pop_back();
            if (bad[v]) continue;
            
            for (int u : g[v]) {
                cnt[C[u]]--;
                if (cnt[C[u]] == 0) {
                    curr--;
                }
                q[len(g[u])].push_back(u);
            }
        }
        
        reset(root);
        return curr == 0;
    };
    
    vector<int> res(N);
    for (int i = 0; i < N; i++) res[i] = calc(i);
    return res;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB 2nd lines differ - on the 1st token, expected: '0', found: '1'
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Incorrect 0 ms 348 KB 2nd lines differ - on the 1st token, expected: '0', found: '1'
10 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Execution timed out 2075 ms 15824 KB Time limit exceeded
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Correct 0 ms 348 KB Output is correct
6 Correct 0 ms 348 KB Output is correct
7 Correct 0 ms 348 KB Output is correct
8 Correct 0 ms 348 KB Output is correct
9 Correct 0 ms 600 KB Output is correct
10 Correct 0 ms 344 KB Output is correct
11 Correct 1 ms 348 KB Output is correct
12 Correct 1 ms 412 KB Output is correct
13 Correct 1 ms 348 KB Output is correct
14 Correct 0 ms 348 KB Output is correct
15 Correct 453 ms 8820 KB Output is correct
16 Correct 420 ms 9048 KB Output is correct
17 Correct 456 ms 9288 KB Output is correct
18 Correct 435 ms 10536 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Execution timed out 2075 ms 15824 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB 2nd lines differ - on the 1st token, expected: '0', found: '1'
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB 2nd lines differ - on the 1st token, expected: '0', found: '1'
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB 2nd lines differ - on the 1st token, expected: '0', found: '1'
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 0 ms 348 KB Output is correct
5 Incorrect 0 ms 348 KB 2nd lines differ - on the 1st token, expected: '0', found: '1'
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 0 ms 348 KB 2nd lines differ - on the 1st token, expected: '0', found: '1'
4 Halted 0 ms 0 KB -