12462022-03-28 22:06:55k_balintMultiplikátoros telebabrátorcpp14Időlimit túllépés 20/100598ms113208 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ÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva4ms6540 KiB
2Elfogadva13ms11976 KiB
subtask220/20
3Elfogadva13ms11912 KiB
4Elfogadva12ms11960 KiB
5Elfogadva12ms12000 KiB
6Elfogadva13ms12036 KiB
7Elfogadva13ms12076 KiB
8Elfogadva13ms12120 KiB
9Elfogadva13ms12160 KiB
10Elfogadva12ms12196 KiB
11Elfogadva13ms12244 KiB
12Elfogadva13ms12296 KiB
13Elfogadva10ms12480 KiB
14Elfogadva12ms12504 KiB
15Elfogadva12ms12544 KiB
16Elfogadva12ms12440 KiB
subtask30/80
17Időlimit túllépés560ms95648 KiB
18Időlimit túllépés593ms97668 KiB
19Időlimit túllépés517ms99748 KiB
20Időlimit túllépés509ms101972 KiB
21Időlimit túllépés536ms104100 KiB
22Időlimit túllépés536ms106164 KiB
23Időlimit túllépés535ms108320 KiB
24Időlimit túllépés564ms110404 KiB
25Időlimit túllépés552ms112480 KiB
26Időlimit túllépés509ms103712 KiB
27Időlimit túllépés523ms98824 KiB
28Időlimit túllépés531ms98784 KiB
29Időlimit túllépés509ms99580 KiB
30Időlimit túllépés521ms101620 KiB
31Időlimit túllépés518ms103880 KiB
32Időlimit túllépés542ms101608 KiB
33Időlimit túllépés508ms101180 KiB
34Időlimit túllépés514ms105120 KiB
35Időlimit túllépés528ms103960 KiB
36Időlimit túllépés595ms106092 KiB
37Időlimit túllépés595ms108060 KiB
38Időlimit túllépés598ms110192 KiB
39Időlimit túllépés589ms112172 KiB
40Időlimit túllépés577ms113208 KiB