1246 2022. 03. 28 22:06:55 k_balint Multiplikátoros telebabrátor cpp14 Időlimit túllépés 20/100 598ms 113208 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];
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 6540 KiB
2 Elfogadva 13ms 11976 KiB
subtask2 20/20
3 Elfogadva 13ms 11912 KiB
4 Elfogadva 12ms 11960 KiB
5 Elfogadva 12ms 12000 KiB
6 Elfogadva 13ms 12036 KiB
7 Elfogadva 13ms 12076 KiB
8 Elfogadva 13ms 12120 KiB
9 Elfogadva 13ms 12160 KiB
10 Elfogadva 12ms 12196 KiB
11 Elfogadva 13ms 12244 KiB
12 Elfogadva 13ms 12296 KiB
13 Elfogadva 10ms 12480 KiB
14 Elfogadva 12ms 12504 KiB
15 Elfogadva 12ms 12544 KiB
16 Elfogadva 12ms 12440 KiB
subtask3 0/80
17 Időlimit túllépés 560ms 95648 KiB
18 Időlimit túllépés 593ms 97668 KiB
19 Időlimit túllépés 517ms 99748 KiB
20 Időlimit túllépés 509ms 101972 KiB
21 Időlimit túllépés 536ms 104100 KiB
22 Időlimit túllépés 536ms 106164 KiB
23 Időlimit túllépés 535ms 108320 KiB
24 Időlimit túllépés 564ms 110404 KiB
25 Időlimit túllépés 552ms 112480 KiB
26 Időlimit túllépés 509ms 103712 KiB
27 Időlimit túllépés 523ms 98824 KiB
28 Időlimit túllépés 531ms 98784 KiB
29 Időlimit túllépés 509ms 99580 KiB
30 Időlimit túllépés 521ms 101620 KiB
31 Időlimit túllépés 518ms 103880 KiB
32 Időlimit túllépés 542ms 101608 KiB
33 Időlimit túllépés 508ms 101180 KiB
34 Időlimit túllépés 514ms 105120 KiB
35 Időlimit túllépés 528ms 103960 KiB
36 Időlimit túllépés 595ms 106092 KiB
37 Időlimit túllépés 595ms 108060 KiB
38 Időlimit túllépés 598ms 110192 KiB
39 Időlimit túllépés 589ms 112172 KiB
40 Időlimit túllépés 577ms 113208 KiB