50922023-04-16 16:21:30szilMultiplikátoros telebabrátorcpp14Hibás válasz 0/100331ms125032 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 = 30; 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 = 30; 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
1Elfogadva7ms11188 KiB
2Elfogadva9ms14144 KiB
subtask20/20
3Hibás válasz9ms14364 KiB
4Elfogadva10ms14564 KiB
5Hibás válasz10ms14776 KiB
6Elfogadva10ms15096 KiB
7Hibás válasz9ms15308 KiB
8Hibás válasz9ms15524 KiB
9Elfogadva9ms15728 KiB
10Elfogadva9ms15584 KiB
11Elfogadva10ms15904 KiB
12Hibás válasz9ms15960 KiB
13Elfogadva9ms16152 KiB
14Hibás válasz9ms15908 KiB
15Hibás válasz9ms15904 KiB
16Hibás válasz8ms15884 KiB
subtask30/80
17Hibás válasz254ms112264 KiB
18Elfogadva254ms112236 KiB
19Hibás válasz254ms112264 KiB
20Elfogadva254ms112288 KiB
21Elfogadva256ms112268 KiB
22Hibás válasz254ms112560 KiB
23Elfogadva256ms112504 KiB
24Elfogadva254ms112476 KiB
25Hibás válasz256ms112372 KiB
26Hibás válasz252ms112684 KiB
27Elfogadva257ms112716 KiB
28Elfogadva252ms112636 KiB
29Hibás válasz261ms112280 KiB
30Hibás válasz259ms112344 KiB
31Elfogadva319ms112896 KiB
32Elfogadva317ms115436 KiB
33Elfogadva324ms117920 KiB
34Elfogadva330ms125032 KiB
35Hibás válasz250ms114288 KiB
36Elfogadva244ms114096 KiB
37Elfogadva243ms113832 KiB
38Elfogadva331ms113924 KiB
39Hibás válasz331ms113724 KiB
40Hibás válasz237ms113132 KiB