1247 2022. 03. 28 22:08:50 k_balint Multiplikátoros telebabrátor cpp14 Időlimit túllépés 20/100 601ms 130880 KiB
#include <bits/stdc++.h>
using namespace std;
const int c=1e5+5;
const int K=31;

struct edge{
    int v,w;
    edge(int vv, int ww){
        v=vv; w=ww;
    }
    edge(){
        v=w=0;
    }
};

struct node{
    vector<int> to;
    node(){
        to.resize(2);
        to[0]=to[1]=-1; 
    }
};

vector<node> trie=vector<node>(1);

void add(int k){
    int cur=0;
    for(int i=K-1;i>=0;i--){
        int j=(k>>i)&1;
        if(trie[cur].to[j]==-1){
            trie[cur].to[j]=trie.size();
            trie.push_back(node());
        }
        cur=trie[cur].to[j];
    }
}

int maxi(int k){
    int res=0; int cur=0;
    for(int i=K-1;i>=0;i--){
        int j=(k>>i)&1;
        if(trie[cur].to[j^1]!=-1){
            res |= 1<<i;
            cur=trie[cur].to[j^1];
        }
        else cur=trie[cur].to[j];
    }
    return res^k;
}

vector<edge> adj[c];
int d[c];
unordered_map<int,int> mp;

void dfs(int v, int p){
    mp[d[v]]=v; add(d[v]);
    for(edge x:adj[v]){
        if(x.v != p){
            d[x.v]=d[v]^x.w;
            dfs(x.v,v);
        }
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n; cin>>n;
    for(int i=1;i<n;i++){
        int a,b,w; cin>>a>>b>>w;
        adj[a].push_back(edge(b,w));
        adj[b].push_back(edge(a,w));
    }

    dfs(1,0);
    for(int i=1;i<=n;i++){
        cout << mp[maxi(d[i])] << ' ';
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 4ms 6580 KiB
2 Elfogadva 12ms 11860 KiB
subtask2 20/20
3 Elfogadva 12ms 11968 KiB
4 Elfogadva 12ms 12024 KiB
5 Elfogadva 12ms 12068 KiB
6 Elfogadva 14ms 12032 KiB
7 Elfogadva 12ms 12100 KiB
8 Elfogadva 12ms 12124 KiB
9 Elfogadva 10ms 12176 KiB
10 Elfogadva 10ms 12224 KiB
11 Elfogadva 10ms 12316 KiB
12 Elfogadva 13ms 12332 KiB
13 Elfogadva 10ms 12488 KiB
14 Elfogadva 12ms 12420 KiB
15 Elfogadva 10ms 12452 KiB
16 Elfogadva 13ms 12512 KiB
subtask3 0/80
17 Időlimit túllépés 558ms 93656 KiB
18 Időlimit túllépés 547ms 95572 KiB
19 Időlimit túllépés 521ms 96532 KiB
20 Időlimit túllépés 507ms 98564 KiB
21 Időlimit túllépés 513ms 100724 KiB
22 Időlimit túllépés 573ms 102812 KiB
23 Időlimit túllépés 583ms 104900 KiB
24 Időlimit túllépés 596ms 107200 KiB
25 Időlimit túllépés 597ms 109192 KiB
26 Időlimit túllépés 519ms 111116 KiB
27 Időlimit túllépés 527ms 108568 KiB
28 Időlimit túllépés 509ms 110636 KiB
29 Időlimit túllépés 529ms 112528 KiB
30 Időlimit túllépés 592ms 114808 KiB
31 Időlimit túllépés 566ms 114296 KiB
32 Időlimit túllépés 601ms 114636 KiB
33 Időlimit túllépés 597ms 117636 KiB
34 Időlimit túllépés 600ms 121692 KiB
35 Időlimit túllépés 600ms 120612 KiB
36 Időlimit túllépés 596ms 122600 KiB
37 Időlimit túllépés 575ms 124544 KiB
38 Időlimit túllépés 538ms 126724 KiB
39 Időlimit túllépés 579ms 128696 KiB
40 Időlimit túllépés 591ms 130880 KiB