5313 2023. 04. 25 20:10:21 Catt Multiplikátoros telebabrátor cpp17 Időlimit túllépés 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;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1816 KiB
2 Elfogadva 10ms 8292 KiB
subtask2 20/20
3 Elfogadva 12ms 8660 KiB
4 Elfogadva 10ms 8796 KiB
5 Elfogadva 12ms 8792 KiB
6 Elfogadva 12ms 9092 KiB
7 Elfogadva 12ms 9340 KiB
8 Elfogadva 10ms 9332 KiB
9 Elfogadva 10ms 9380 KiB
10 Elfogadva 12ms 9428 KiB
11 Elfogadva 12ms 9716 KiB
12 Elfogadva 12ms 10100 KiB
13 Elfogadva 12ms 10268 KiB
14 Elfogadva 12ms 10388 KiB
15 Elfogadva 10ms 10556 KiB
16 Elfogadva 12ms 11052 KiB
subtask3 0/80
17 Időlimit túllépés 551ms 216368 KiB
18 Időlimit túllépés 570ms 112980 KiB
19 Időlimit túllépés 555ms 220580 KiB
20 Időlimit túllépés 565ms 220532 KiB
21 Időlimit túllépés 578ms 115292 KiB
22 Időlimit túllépés 544ms 220876 KiB
23 Időlimit túllépés 542ms 220880 KiB
24 Időlimit túllépés 586ms 115352 KiB
25 Időlimit túllépés 555ms 220632 KiB
26 Időlimit túllépés 545ms 220908 KiB
27 Időlimit túllépés 542ms 220904 KiB
28 Időlimit túllépés 550ms 220908 KiB
29 Időlimit túllépés 552ms 220536 KiB
30 Időlimit túllépés 563ms 115192 KiB
31 Időlimit túllépés 554ms 115196 KiB
32 Időlimit túllépés 561ms 222176 KiB
33 Időlimit túllépés 560ms 223656 KiB
34 Időlimit túllépés 564ms 118904 KiB
35 Időlimit túllépés 538ms 222016 KiB
36 Időlimit túllépés 532ms 221876 KiB
37 Időlimit túllépés 550ms 116128 KiB
38 Időlimit túllépés 550ms 221824 KiB
39 Időlimit túllépés 531ms 221576 KiB
40 Időlimit túllépés 569ms 116004 KiB