53162023-04-25 20:12:41CattMultiplikátoros telebabrátorcpp17Időlimit túllépés 20/100591ms221116 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1700 KiB
2Elfogadva9ms8184 KiB
subtask220/20
3Elfogadva9ms8260 KiB
4Elfogadva9ms8324 KiB
5Elfogadva9ms8528 KiB
6Elfogadva9ms8896 KiB
7Elfogadva10ms9052 KiB
8Elfogadva9ms9188 KiB
9Elfogadva9ms9400 KiB
10Elfogadva10ms9628 KiB
11Elfogadva9ms9588 KiB
12Elfogadva8ms9688 KiB
13Elfogadva8ms9612 KiB
14Elfogadva8ms9852 KiB
15Elfogadva8ms9904 KiB
16Elfogadva8ms10032 KiB
subtask30/80
17Elfogadva456ms213492 KiB
18Elfogadva456ms213548 KiB
19Időlimit túllépés560ms108244 KiB
20Időlimit túllépés568ms213896 KiB
21Elfogadva456ms213952 KiB
22Elfogadva458ms213896 KiB
23Elfogadva460ms214172 KiB
24Időlimit túllépés578ms108424 KiB
25Elfogadva462ms213732 KiB
26Elfogadva479ms214164 KiB
27Elfogadva486ms214132 KiB
28Időlimit túllépés582ms108544 KiB
29Időlimit túllépés591ms108736 KiB
30Időlimit túllépés560ms108820 KiB
31Időlimit túllépés517ms214364 KiB
32Időlimit túllépés578ms109632 KiB
33Időlimit túllépés575ms110312 KiB
34Időlimit túllépés509ms221116 KiB
35Elfogadva479ms215468 KiB
36Elfogadva446ms215264 KiB
37Időlimit túllépés572ms109288 KiB
38Elfogadva458ms215316 KiB
39Elfogadva449ms215028 KiB
40Elfogadva444ms214956 KiB