50932023-04-16 16:23:39szilMultiplikátoros telebabrátorcpp14Hibás válasz 0/100358ms125212 KiB
#include <bits/stdc++.h>

using ll = long long;
using namespace std;

const int MAXN = 200001;

vector<pair<int, int>> g[MAXN];
int d[MAXN];

struct Node {
    Node *a[2];
    int u = -1;

    Node() {
        a[0] = a[1] = nullptr;
    }
};

Node *root;

void add(int u) {
    Node *cur = root;
    for (int i = 29; i >= 0; i--) {
        int x = (d[u] >> i) & 1;
        if (cur->a[x] == nullptr) cur->a[x] = new Node();
        cur = cur->a[x];
    }
    cur->u = u;
}

void dfs(int u, int p = 0) {
    for (auto [v, w] : g[u]) {
        if (v != p) {
            d[v] = d[u] ^ w;
            add(v);
            dfs(v, u);
        }
    }
}

void solve() {
    root = new Node();
    int n; cin >> n;
    for (int i = 0; i < n - 1; i++) {
        int a, b, w; cin >> a >> b >> w;
        g[a].push_back({b, w});
        g[b].push_back({a, w});
    }
    dfs(1);
    for (int i = 1; i <= n; i++) {
        Node *cur = root;
        for (int j = 29; j >= 0; j--) {
            int x = (d[i] >> j) & 1;
            if (cur->a[!x] != nullptr) cur = cur->a[!x];
            else cur = cur->a[x];
        }
        cout << cur->u << " ";
    }
    cout << "\n";
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    solve();
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva7ms11320 KiB
2Elfogadva10ms14336 KiB
subtask20/20
3Hibás válasz9ms14480 KiB
4Elfogadva10ms14432 KiB
5Hibás válasz10ms14428 KiB
6Elfogadva9ms14688 KiB
7Hibás válasz10ms14884 KiB
8Hibás válasz9ms15112 KiB
9Elfogadva9ms15216 KiB
10Elfogadva9ms15168 KiB
11Elfogadva9ms15184 KiB
12Hibás válasz9ms15456 KiB
13Elfogadva9ms15600 KiB
14Hibás válasz9ms15656 KiB
15Hibás válasz9ms15620 KiB
16Hibás válasz9ms15592 KiB
subtask30/80
17Hibás válasz254ms111960 KiB
18Elfogadva312ms112464 KiB
19Hibás válasz330ms112412 KiB
20Elfogadva314ms112636 KiB
21Elfogadva319ms112624 KiB
22Hibás válasz261ms112612 KiB
23Elfogadva259ms112648 KiB
24Elfogadva256ms112896 KiB
25Hibás válasz317ms113036 KiB
26Hibás válasz298ms113476 KiB
27Elfogadva275ms113268 KiB
28Elfogadva358ms113256 KiB
29Hibás válasz314ms112788 KiB
30Hibás válasz270ms112924 KiB
31Elfogadva316ms113320 KiB
32Elfogadva263ms115612 KiB
33Elfogadva263ms118088 KiB
34Elfogadva263ms125212 KiB
35Hibás válasz298ms114484 KiB
36Elfogadva239ms114304 KiB
37Elfogadva238ms114052 KiB
38Elfogadva291ms113920 KiB
39Hibás válasz237ms113772 KiB
40Hibás válasz231ms113180 KiB