5316 2023. 04. 25 20:12:41 Catt Multiplikátoros telebabrátor cpp17 Időlimit túllépés 20/100 591ms 221116 KiB
#include <bits/stdc++.h>
using namespace std;

const int k = 29;

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() {
    ios::sync_with_stdio(0);cin.tie(0); cout.tie(0);
    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;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1700 KiB
2 Elfogadva 9ms 8184 KiB
subtask2 20/20
3 Elfogadva 9ms 8260 KiB
4 Elfogadva 9ms 8324 KiB
5 Elfogadva 9ms 8528 KiB
6 Elfogadva 9ms 8896 KiB
7 Elfogadva 10ms 9052 KiB
8 Elfogadva 9ms 9188 KiB
9 Elfogadva 9ms 9400 KiB
10 Elfogadva 10ms 9628 KiB
11 Elfogadva 9ms 9588 KiB
12 Elfogadva 8ms 9688 KiB
13 Elfogadva 8ms 9612 KiB
14 Elfogadva 8ms 9852 KiB
15 Elfogadva 8ms 9904 KiB
16 Elfogadva 8ms 10032 KiB
subtask3 0/80
17 Elfogadva 456ms 213492 KiB
18 Elfogadva 456ms 213548 KiB
19 Időlimit túllépés 560ms 108244 KiB
20 Időlimit túllépés 568ms 213896 KiB
21 Elfogadva 456ms 213952 KiB
22 Elfogadva 458ms 213896 KiB
23 Elfogadva 460ms 214172 KiB
24 Időlimit túllépés 578ms 108424 KiB
25 Elfogadva 462ms 213732 KiB
26 Elfogadva 479ms 214164 KiB
27 Elfogadva 486ms 214132 KiB
28 Időlimit túllépés 582ms 108544 KiB
29 Időlimit túllépés 591ms 108736 KiB
30 Időlimit túllépés 560ms 108820 KiB
31 Időlimit túllépés 517ms 214364 KiB
32 Időlimit túllépés 578ms 109632 KiB
33 Időlimit túllépés 575ms 110312 KiB
34 Időlimit túllépés 509ms 221116 KiB
35 Elfogadva 479ms 215468 KiB
36 Elfogadva 446ms 215264 KiB
37 Időlimit túllépés 572ms 109288 KiB
38 Elfogadva 458ms 215316 KiB
39 Elfogadva 449ms 215028 KiB
40 Elfogadva 444ms 214956 KiB