50912023-04-16 16:07:26szilMultiplikátoros telebabrátorcpp14Hibás válasz 0/100328ms123420 KiB
#include <bits/stdc++.h>

using ll = long long;
using namespace std;

const int MAXN = 100001;

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

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

    void add(int i, int n, int v) {
        if (i >= 0) {
            int bit = (n >> i) & 1;
            if (a[bit] == nullptr) {
                a[bit] = new Node();
            }
            a[bit]->add(i-1, n, v);
        } else {
            u = v;
        }
    }

    int qry(int i, int n) {
        if (u != -1) return u;
        int bit = (n >> i) & 1;
        if (a[!bit] != nullptr) {
            return a[!bit]->qry(i-1, n);
        } else {
            assert(a[bit] != nullptr);
            return a[bit]->qry(i-1, n);
        }
    }
};

Node *root;

void dfs(int u, int p = 0) {
    for (auto [v, w] : g[u]) {
        if (v != p) {
            d[v] = d[u] ^ w;
            root->add(31, d[v], 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++) {
        int ans = root->qry(31, d[i]);
        assert(ans != -1);
        cout << ans << " ";
    }
    cout << "\n";
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    solve();
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva4ms6672 KiB
2Elfogadva8ms9492 KiB
subtask20/20
3Hibás válasz8ms9724 KiB
4Elfogadva8ms9948 KiB
5Hibás válasz8ms10172 KiB
6Elfogadva8ms10304 KiB
7Hibás válasz8ms10376 KiB
8Hibás válasz8ms10492 KiB
9Elfogadva8ms10704 KiB
10Elfogadva8ms10924 KiB
11Elfogadva8ms11284 KiB
12Hibás válasz8ms11500 KiB
13Elfogadva8ms11668 KiB
14Hibás válasz8ms11560 KiB
15Hibás válasz8ms11732 KiB
16Hibás válasz8ms11732 KiB
subtask30/80
17Hibás válasz238ms108048 KiB
18Elfogadva287ms108044 KiB
19Hibás válasz279ms108264 KiB
20Elfogadva233ms108544 KiB
21Elfogadva238ms108492 KiB
22Hibás válasz277ms108476 KiB
23Elfogadva275ms108504 KiB
24Elfogadva286ms108692 KiB
25Hibás válasz237ms108568 KiB
26Hibás válasz282ms109180 KiB
27Elfogadva233ms109196 KiB
28Elfogadva287ms109060 KiB
29Hibás válasz328ms108588 KiB
30Hibás válasz298ms108612 KiB
31Elfogadva286ms108920 KiB
32Elfogadva298ms111728 KiB
33Elfogadva273ms114696 KiB
34Elfogadva308ms123420 KiB
35Hibás válasz264ms109932 KiB
36Elfogadva268ms109740 KiB
37Elfogadva257ms109500 KiB
38Elfogadva216ms109580 KiB
39Hibás válasz219ms109272 KiB
40Hibás válasz218ms108660 KiB