12472022-03-28 22:08:50k_balintMultiplikátoros telebabrátorcpp14Időlimit túllépés 20/100601ms130880 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva4ms6580 KiB
2Elfogadva12ms11860 KiB
subtask220/20
3Elfogadva12ms11968 KiB
4Elfogadva12ms12024 KiB
5Elfogadva12ms12068 KiB
6Elfogadva14ms12032 KiB
7Elfogadva12ms12100 KiB
8Elfogadva12ms12124 KiB
9Elfogadva10ms12176 KiB
10Elfogadva10ms12224 KiB
11Elfogadva10ms12316 KiB
12Elfogadva13ms12332 KiB
13Elfogadva10ms12488 KiB
14Elfogadva12ms12420 KiB
15Elfogadva10ms12452 KiB
16Elfogadva13ms12512 KiB
subtask30/80
17Időlimit túllépés558ms93656 KiB
18Időlimit túllépés547ms95572 KiB
19Időlimit túllépés521ms96532 KiB
20Időlimit túllépés507ms98564 KiB
21Időlimit túllépés513ms100724 KiB
22Időlimit túllépés573ms102812 KiB
23Időlimit túllépés583ms104900 KiB
24Időlimit túllépés596ms107200 KiB
25Időlimit túllépés597ms109192 KiB
26Időlimit túllépés519ms111116 KiB
27Időlimit túllépés527ms108568 KiB
28Időlimit túllépés509ms110636 KiB
29Időlimit túllépés529ms112528 KiB
30Időlimit túllépés592ms114808 KiB
31Időlimit túllépés566ms114296 KiB
32Időlimit túllépés601ms114636 KiB
33Időlimit túllépés597ms117636 KiB
34Időlimit túllépés600ms121692 KiB
35Időlimit túllépés600ms120612 KiB
36Időlimit túllépés596ms122600 KiB
37Időlimit túllépés575ms124544 KiB
38Időlimit túllépés538ms126724 KiB
39Időlimit túllépés579ms128696 KiB
40Időlimit túllépés591ms130880 KiB