53142023-04-25 20:10:59CattMultiplikátoros telebabrátorcpp17Időlimit túllépés 20/100587ms215308 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() {
    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
1Elfogadva3ms1828 KiB
2Elfogadva10ms8352 KiB
subtask220/20
3Elfogadva9ms8564 KiB
4Elfogadva9ms8784 KiB
5Elfogadva9ms8732 KiB
6Elfogadva9ms8828 KiB
7Elfogadva9ms8988 KiB
8Elfogadva9ms8956 KiB
9Elfogadva9ms9216 KiB
10Elfogadva9ms9128 KiB
11Elfogadva9ms9136 KiB
12Elfogadva9ms9492 KiB
13Elfogadva9ms9744 KiB
14Elfogadva9ms9868 KiB
15Elfogadva8ms9708 KiB
16Elfogadva9ms9696 KiB
subtask30/80
17Időlimit túllépés561ms107684 KiB
18Elfogadva463ms213452 KiB
19Időlimit túllépés574ms108016 KiB
20Elfogadva463ms213660 KiB
21Elfogadva458ms213864 KiB
22Időlimit túllépés564ms108544 KiB
23Időlimit túllépés564ms108440 KiB
24Időlimit túllépés563ms108432 KiB
25Elfogadva469ms213764 KiB
26Időlimit túllépés564ms108664 KiB
27Időlimit túllépés570ms108788 KiB
28Elfogadva463ms214568 KiB
29Elfogadva467ms214084 KiB
30Időlimit túllépés573ms108700 KiB
31Időlimit túllépés565ms108848 KiB
32Időlimit túllépés587ms109444 KiB
33Időlimit túllépés574ms110156 KiB
34Időlimit túllépés555ms112296 KiB
35Időlimit túllépés559ms109516 KiB
36Időlimit túllépés561ms215308 KiB
37Időlimit túllépés574ms109032 KiB
38Elfogadva479ms214820 KiB
39Elfogadva460ms214576 KiB
40Elfogadva446ms214576 KiB