53132023-04-25 20:10:21CattMultiplikátoros telebabrátorcpp17Időlimit túllépés 20/100586ms223656 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1816 KiB
2Elfogadva10ms8292 KiB
subtask220/20
3Elfogadva12ms8660 KiB
4Elfogadva10ms8796 KiB
5Elfogadva12ms8792 KiB
6Elfogadva12ms9092 KiB
7Elfogadva12ms9340 KiB
8Elfogadva10ms9332 KiB
9Elfogadva10ms9380 KiB
10Elfogadva12ms9428 KiB
11Elfogadva12ms9716 KiB
12Elfogadva12ms10100 KiB
13Elfogadva12ms10268 KiB
14Elfogadva12ms10388 KiB
15Elfogadva10ms10556 KiB
16Elfogadva12ms11052 KiB
subtask30/80
17Időlimit túllépés551ms216368 KiB
18Időlimit túllépés570ms112980 KiB
19Időlimit túllépés555ms220580 KiB
20Időlimit túllépés565ms220532 KiB
21Időlimit túllépés578ms115292 KiB
22Időlimit túllépés544ms220876 KiB
23Időlimit túllépés542ms220880 KiB
24Időlimit túllépés586ms115352 KiB
25Időlimit túllépés555ms220632 KiB
26Időlimit túllépés545ms220908 KiB
27Időlimit túllépés542ms220904 KiB
28Időlimit túllépés550ms220908 KiB
29Időlimit túllépés552ms220536 KiB
30Időlimit túllépés563ms115192 KiB
31Időlimit túllépés554ms115196 KiB
32Időlimit túllépés561ms222176 KiB
33Időlimit túllépés560ms223656 KiB
34Időlimit túllépés564ms118904 KiB
35Időlimit túllépés538ms222016 KiB
36Időlimit túllépés532ms221876 KiB
37Időlimit túllépés550ms116128 KiB
38Időlimit túllépés550ms221824 KiB
39Időlimit túllépés531ms221576 KiB
40Időlimit túllépés569ms116004 KiB