pts91 WA#3求调
查看原帖
pts91 WA#3求调
1263684
Elysialr楼主2024/10/17 21:00
#include<bits/stdc++.h>
using namespace std;

struct Trie{
    int data;
    int son[2]={};
};

vector<pair<int,int>> r[1000001];

Trie t[3000001];
int a[1000001];
int tot=0,size,n;

void dfs(int x){
    for(int i=0;i<r[x].size();i++){
        if(a[r[x][i].first]!=-1) continue;
        a[r[x][i].first]=a[x]^r[x][i].second;
        dfs(r[x][i].first);
    }
    size=max(size,a[x]);
}

void add(int x){
    int p=0,s=0;
    for(int i=(1<<size);i>0;i>>=1){
        bool c=x&i;
        if(t[p].son[c]==0)
        t[p].son[c]=++tot;    
        
        s+=(x&i);
        t[t[p].son[c]].data=s;
        p=t[p].son[c];
    }
}

int search(int x){
    int p=0;
    for(int i=(1<<size);i>0;i>>=1){
        bool c=x&i;
        if(t[p].son[!c]==0) p=t[p].son[c];
        else p=t[p].son[!c];
        
    }
    return t[p].data^x;
}

int main(){
    cin>>n;
    for(int i=1;i<n;i++){
        int x,y,z;
        cin>>x>>y>>z;
        r[x].push_back(make_pair(y,z));
        r[y].push_back(make_pair(x,z));
        a[i]=-1;
    }
    a[1]=0;
    dfs(1);

    size=log2(size);
    for(int i=1;i<=n;i++)
    add(a[i]);

    int ans,res;
    for(int i=1;i<=n;i++)
    res=max(res,search(a[i]));

    cout<<res;
    return 0;
}
2024/10/17 21:00
加载中...