50942023-04-16 16:25:26szilMultiplikátoros telebabrátorcpp14Hibás válasz 0/100333ms125296 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 = 31; 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 = 31; 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
1Elfogadva7ms11196 KiB
2Elfogadva9ms14212 KiB
subtask20/20
3Hibás válasz9ms14424 KiB
4Elfogadva9ms14728 KiB
5Hibás válasz10ms14768 KiB
6Elfogadva9ms14972 KiB
7Hibás válasz9ms15284 KiB
8Hibás válasz9ms15144 KiB
9Elfogadva9ms15396 KiB
10Elfogadva9ms15604 KiB
11Elfogadva9ms15928 KiB
12Hibás válasz10ms16148 KiB
13Elfogadva10ms16492 KiB
14Hibás válasz9ms16732 KiB
15Hibás válasz9ms16736 KiB
16Hibás válasz8ms16712 KiB
subtask30/80
17Hibás válasz312ms113092 KiB
18Elfogadva256ms113060 KiB
19Hibás válasz254ms112904 KiB
20Elfogadva252ms112928 KiB
21Elfogadva312ms112988 KiB
22Hibás válasz310ms112976 KiB
23Elfogadva310ms113012 KiB
24Elfogadva256ms113032 KiB
25Hibás válasz256ms112980 KiB
26Hibás válasz307ms113256 KiB
27Elfogadva256ms113284 KiB
28Elfogadva252ms113132 KiB
29Hibás válasz263ms112652 KiB
30Hibás válasz312ms113012 KiB
31Elfogadva314ms113268 KiB
32Elfogadva319ms115688 KiB
33Elfogadva324ms118172 KiB
34Elfogadva326ms125296 KiB
35Hibás válasz254ms114444 KiB
36Elfogadva245ms114260 KiB
37Elfogadva241ms113980 KiB
38Elfogadva296ms113880 KiB
39Hibás válasz291ms113720 KiB
40Hibás válasz333ms113072 KiB