1 条题解

  • 0
    @ 2025-10-8 16:56:12
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    vector<pair<int,int>>G[N];
    int n,d[N];
    void dfs(int x,int fa)
    {
    	for(auto i:G[x])
    	{
    		int y=i.first,w=i.second;if(y==fa)continue;
    		d[y]=d[x]^w;
    		dfs(y,x);
    	}
    }
    
    int id,ch[31*N][2];
    void ins(int x)
    {
    	int p=0;
    	for(int i=30;i>=0;i--)
    	{
    		int j=(x>>i)&1;
    		if(ch[p][j]==0) ch[p][j]=++id;
    		p=ch[p][j];
    	}
    }
    int query(int x) {
    	int p=0,res=0;
    	for(int i=30;i>=0;i--)
    	{
    		int j=(x>>i)&1;
    		if(ch[p][!j]) p=ch[p][!j],res+=1<<i;
    		else p=ch[p][j];
    	}
    	return res;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1,x,y,w;i<n;i++)
    	{
    		scanf("%d%d%d",&x,&y,&w);x++;y++;
    		G[x].push_back({y,w});
    		G[y].push_back({x,w});
    	}
    	memset(d,0,sizeof(d));
    	dfs(1,0);
    	id=0;memset(ch,0,sizeof(ch));
    	for(int i=1;i<=n;i++)ins(d[i]);
    	int ans=0;
    	for(int i=1;i<=n;i++) ans=max(ans, query(d[i]));
    	printf("%d\n",ans);
    	return 0;
    }
    
    • 1

    *【字典树】最大异或值路径[POJ3764]

    信息

    ID
    1283
    时间
    2000ms
    内存
    64MiB
    难度
    7
    标签
    递交数
    229
    已通过
    50
    上传者