12482022-03-28 22:13:55k_balintMultiplikátoros telebabrátorcpp14Időlimit túllépés 20/100596ms128432 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.emplace_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];
vector<pair<int,int>> mp;

void dfs(int v, int p){
    mp.emplace_back(make_pair(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);
    sort(mp.begin(),mp.end());
    for(int i=1;i<=n;i++){
        int cur=maxi(d[i]);
        auto it=lower_bound(mp.begin(),mp.end(),make_pair(cur,-1));
        cout << it->second << ' ';
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva4ms6564 KiB
2Elfogadva13ms11900 KiB
subtask220/20
3Elfogadva10ms11872 KiB
4Elfogadva12ms11892 KiB
5Elfogadva10ms11988 KiB
6Elfogadva10ms12060 KiB
7Elfogadva12ms12056 KiB
8Elfogadva12ms12156 KiB
9Elfogadva12ms12124 KiB
10Elfogadva10ms12192 KiB
11Elfogadva12ms12212 KiB
12Elfogadva12ms12296 KiB
13Elfogadva12ms12412 KiB
14Elfogadva12ms12372 KiB
15Elfogadva12ms12448 KiB
16Elfogadva10ms12436 KiB
subtask30/80
17Időlimit túllépés569ms91492 KiB
18Időlimit túllépés560ms93588 KiB
19Időlimit túllépés513ms95724 KiB
20Időlimit túllépés584ms97824 KiB
21Időlimit túllépés578ms100028 KiB
22Időlimit túllépés589ms102060 KiB
23Időlimit túllépés538ms104180 KiB
24Időlimit túllépés505ms106300 KiB
25Időlimit túllépés577ms108528 KiB
26Időlimit túllépés591ms110708 KiB
27Időlimit túllépés593ms112892 KiB
28Időlimit túllépés569ms114896 KiB
29Időlimit túllépés582ms116732 KiB
30Időlimit túllépés583ms118980 KiB
31Időlimit túllépés588ms121184 KiB
32Időlimit túllépés563ms124444 KiB
33Időlimit túllépés566ms122440 KiB
34Időlimit túllépés593ms124436 KiB
35Időlimit túllépés595ms122168 KiB
36Időlimit túllépés596ms124420 KiB
37Időlimit túllépés591ms126336 KiB
38Időlimit túllépés574ms128400 KiB
39Időlimit túllépés588ms128432 KiB
40Időlimit túllépés584ms123580 KiB