5313 2023. 04. 25 20:10:21 Catt Multiplikátoros telebabrátor cpp17 Time limit exceeded 20/100 586ms 223656 KiB
#include <bits/stdc++.h>
using namespace std;

const int k = 31;

vector<vector<pair<int, int> > > g;
vector<int> d;

void dfs(int x, int p = -1) {
    for(pair<int, int> sz : g[x]) {
        if(sz.first == p )continue;
        d[sz.first] = d[x] ^ sz.second;
        dfs(sz.first, x);
    }
}

struct node {
    vector<int> to;
    int end;

    node() {
        end = -1;
        to.assign(2, -1);
    }
};

vector<node> trie(1);

void add(int x, int ind) {
    int cur = 0;
    for(int i = k; i >= 0; i--) {
        int to = (((1<<i) & x) != 0);
        if(trie[cur].to[to] == -1) {
            trie[cur].to[to] = trie.size();
            trie.push_back(node());
        }
        cur = trie[cur].to[to];
    }

    trie[cur].end = ind;
}

int ask(int x) {
    int cur = 0;
    for(int i = k; i >= 0; i--) {
        int to = (((1<<i) & x) != 0);
        if(trie[cur].to[1-to] == -1) {
            cur = trie[cur].to[to];
        }
        else cur = trie[cur].to[1-to];
    }
    return trie[cur].end;
}

int main() {
    int n;
    cin >>n;

    g.resize(n+1);
    d.resize(n+1, 0);
    for(int i = 0; i < n-1; i++) {
        int x,y,z;
        cin >> x >> y >> z;
        g[x].push_back({y, z});
        g[y].push_back({x, z});
    }

    dfs(1);
    for(int i = 1; i <= n; i++) add(d[i], i);
    for(int i = 1; i <= n; i++) cout << ask(d[i]) << ' ';

    return 0;
}
Subtask Sum Test Verdict Time Memory
subtask1 0/0
1 Accepted 3ms 1816 KiB
2 Accepted 10ms 8292 KiB
subtask2 20/20
3 Accepted 12ms 8660 KiB
4 Accepted 10ms 8796 KiB
5 Accepted 12ms 8792 KiB
6 Accepted 12ms 9092 KiB
7 Accepted 12ms 9340 KiB
8 Accepted 10ms 9332 KiB
9 Accepted 10ms 9380 KiB
10 Accepted 12ms 9428 KiB
11 Accepted 12ms 9716 KiB
12 Accepted 12ms 10100 KiB
13 Accepted 12ms 10268 KiB
14 Accepted 12ms 10388 KiB
15 Accepted 10ms 10556 KiB
16 Accepted 12ms 11052 KiB
subtask3 0/80
17 Time limit exceeded 551ms 216368 KiB
18 Time limit exceeded 570ms 112980 KiB
19 Time limit exceeded 555ms 220580 KiB
20 Time limit exceeded 565ms 220532 KiB
21 Time limit exceeded 578ms 115292 KiB
22 Time limit exceeded 544ms 220876 KiB
23 Time limit exceeded 542ms 220880 KiB
24 Time limit exceeded 586ms 115352 KiB
25 Time limit exceeded 555ms 220632 KiB
26 Time limit exceeded 545ms 220908 KiB
27 Time limit exceeded 542ms 220904 KiB
28 Time limit exceeded 550ms 220908 KiB
29 Time limit exceeded 552ms 220536 KiB
30 Time limit exceeded 563ms 115192 KiB
31 Time limit exceeded 554ms 115196 KiB
32 Time limit exceeded 561ms 222176 KiB
33 Time limit exceeded 560ms 223656 KiB
34 Time limit exceeded 564ms 118904 KiB
35 Time limit exceeded 538ms 222016 KiB
36 Time limit exceeded 532ms 221876 KiB
37 Time limit exceeded 550ms 116128 KiB
38 Time limit exceeded 550ms 221824 KiB
39 Time limit exceeded 531ms 221576 KiB
40 Time limit exceeded 569ms 116004 KiB