12502022-03-28 22:27:38k_balintMultiplikátoros telebabrátorcpp14Időlimit túllépés 20/100611ms357856 KiB
#include <bits/stdc++.h>
using namespace std;
const int c=1e5+5;
const int K=30;

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; 
    }
};

node trie[32*c];
int sz=1;

inline 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]=sz++;
        }
        cur=trie[cur].to[j];
    }
}

inline 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){
    for(edge x:adj[v]){
        if(x.v != p){
            d[x.v]=d[v]^x.w;
            dfs(x.v,v);
        }
    }
}

inline int read(){
    int res=0; char ch=getchar();
    while(!isdigit(ch)){
        ch=getchar();
    }

    while(isdigit(ch)){
        res=(res<<3)+(res<<1)+ch-'0';
        ch=getchar();
    }

    return res;
}

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

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

    dfs(1,0);
    
    for(int i=1;i<=n;i++){
        mp[d[i]]=i;
        add(d[i]);
    }

    for(int i=1;i<=n;i++){
        int cur=maxi(d[i]);
        cout << mp[cur] << ' ';
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva370ms357020 KiB
2Elfogadva377ms357460 KiB
subtask220/20
3Elfogadva323ms357484 KiB
4Elfogadva277ms357348 KiB
5Elfogadva319ms357308 KiB
6Elfogadva284ms357452 KiB
7Elfogadva287ms357456 KiB
8Elfogadva293ms357488 KiB
9Elfogadva270ms357524 KiB
10Elfogadva275ms357632 KiB
11Elfogadva277ms357580 KiB
12Elfogadva282ms357696 KiB
13Elfogadva284ms357760 KiB
14Elfogadva277ms357752 KiB
15Elfogadva296ms357856 KiB
16Elfogadva303ms357772 KiB
subtask30/80
17Időlimit túllépés561ms188232 KiB
18Időlimit túllépés589ms190312 KiB
19Időlimit túllépés528ms192324 KiB
20Időlimit túllépés513ms193340 KiB
21Időlimit túllépés595ms191140 KiB
22Időlimit túllépés546ms193220 KiB
23Időlimit túllépés597ms194444 KiB
24Időlimit túllépés531ms194304 KiB
25Időlimit túllépés523ms189336 KiB
26Időlimit túllépés611ms191700 KiB
27Időlimit túllépés598ms193708 KiB
28Időlimit túllépés597ms195656 KiB
29Időlimit túllépés569ms192252 KiB
30Időlimit túllépés523ms192136 KiB
31Időlimit túllépés521ms186848 KiB
32Időlimit túllépés522ms186552 KiB
33Időlimit túllépés537ms188160 KiB
34Időlimit túllépés533ms192968 KiB
35Időlimit túllépés523ms189312 KiB
36Időlimit túllépés569ms189072 KiB
37Időlimit túllépés560ms187584 KiB
38Időlimit túllépés532ms187548 KiB
39Időlimit túllépés528ms187592 KiB
40Időlimit túllépés513ms187016 KiB