首页 > 其他分享 >做题记录整理数据结构2 P4551 最长异或路径(2022/10/13)

做题记录整理数据结构2 P4551 最长异或路径(2022/10/13)

时间:2022-10-13 22:24:52浏览次数:93  
标签:10 13 ch int P4551 异或 ans for1

P4551 最长异或路径
其实我也不知道算不算数据结构,反正就是01trie,不过题目本身似乎也是一个模板?

https://www.luogu.com.cn/blog/108510/solution-p4551

(由于一看到异或就恐惧,所以就直接放看的题解了)

本质上难点就在于:

一个数,如果它两次异或同一个数,那么它是不会有改变的。

那么i~j的路径上的异或和,就可以表示成根到i的异或和异或上根到j的异或和。

#include<bits/stdc++.h>
#define for1(i,a,b) for(int i = a;i<=b;i++)
#define ll long long
#define mp(a,b) make_pair(a,b)
using namespace std;
struct node{
    int to;
    int w;
    int nex;
}a[2000001];
int hd[2000001];
int cnt;
void ru(int x,int y,int z)
{
    a[++cnt].nex=hd[x];
    a[cnt].to=y;
    a[cnt].w=z;
    hd[x]=cnt;
}
int sum[2000001];
void dfs(int x,int fa)
{
    for(int i=hd[x];i;i=a[i].nex)
	{
        int v=a[i].to;
        int w=a[i].w;
        if(v==fa) continue;
        sum[v]=sum[x]^w;
        dfs(v,x);
    }
}
struct node2{
    int ch[2];
}t[2000001];
int tot;
void build(int v,int x)
{
    for(int i=(1<<30);i;i>>=1)
	{
        bool c=v&i;
        if(!t[x].ch[c])
		{
            t[x].ch[c]=++tot;
        }
        x=t[x].ch[c];
    }
}
int cx(int v,int x)
{
	
    int ans=0;
    for(int i=(1<<30);i;i>>=1)
	{
        bool c=v&i;
        if(t[x].ch[!c])
		{
            ans+=i;
            x=t[x].ch[!c];
        }
        else x=t[x].ch[c];
    }
    return ans;
}
int main()
{
    int n;
    scanf("%d",&n);
    int x,y,z;
    for1(i,1,n-1)
	{
        scanf("%d%d%d",&x,&y,&z);
        ru(x,y,z);
        ru(y,x,z);
    }
    dfs(1,-1);
    for1(i,1,n)build(sum[i],0);
    int ans=0;
    for1(i,1,n)
        ans=max(ans,cx(sum[i],0));
    printf("%d\n",ans);
} 

标签:10,13,ch,int,P4551,异或,ans,for1
From: https://www.cnblogs.com/yyx525jia/p/16789932.html

相关文章

  • Windows 10使用Windows7图片查看器浏览图片
    Windows7服役即将结束,届时将停止操作系统更新及安全补丁的下发。笔者也在常识习惯Windows10开发环境。Windows7的图片浏览器大家应该很熟悉,可是到Windows10,图片就使用画板......
  • 3DEXPERIENCE SOLIDWORKS 2023 10大新增功能
    1.装配体•在已解析模式下加载零部件时,通过有选择地使用轻量化的技术自动优化已解析模式。•利用更快地保存大型装配体的功能,提高工作效率。•通过将装配体零部件导出为......
  • Luogu1398
    思路什么毒瘤细节题。考虑如何解决。考虑对这些条件做出进一步的抽象。于是我们做出细致的观察。方便起见,我们横、纵坐标自左往右、自上往下标号。字母之间的关系O......
  • P1541 [NOIP2010 提高组] 乌龟棋
    [NOIP2010提高组]乌龟棋题目背景小明过生日的时候,爸爸送给他一副乌龟棋当作礼物。题目描述乌龟棋的棋盘是一行\(N\)个格子,每个格子上一个分数(非负整数)。棋盘第1格是......
  • JavaScript高级程序设计笔记10 函数Function
    函数1.几种实例化函数对象的方式以函数声明的方式定义函数表达式箭头函数(arrowfunction)使用Function构造函数接收任意多个字符串参数,最后一个参数始终会被......
  • 22-10-13复习
    一知识点1JAVASE标准JAVAME嵌入式,已落伍JAVAEE企业知识点2JDK开发工具-->jre运行环境-->JVM开发虚拟机知识点3建文件,改后缀,得到hello.java;使用Notepad++等......
  • 二周第二次课(3月27日)2.10 环境变量PATH 2.11 cp命令 2.12 mv命令 2.13 文档查看ca
    2.10 环境变量PATHecho$PATH//打印当前的环境变量PATH=$PATH:路径//定义环境变量(在源环境变量的基础上增加)PATH=路径//修改环境变量which查找某个命令的绝对路径,也可以......
  • JavaWeb学习日记2022.10.13
    排序查询(P13)/*排序查询SELECT字段列表FROM表名ORDERBY排序字段名1[排序方式1],排序字段名2[排序方式2]...;排序方式ASC:升序排列(默认值)DESC:降序排列*/--1......
  • 【图床】2022.10.08——雨夜西湖
    水汽浩荡,自屋后腾起。做个梦吧……时间:2021.12.09地点:湖滨同行:Hql设备:a7r3a+G24105F4调整后效果最为惊艳的一张图,r3的锐度和宽容度得以让我大幅度的调整光线、依......
  • 4.错误代码C1083
    有的时候在VS中遇到的errorC1083:无法打开**:“*.*”:Nosuchfileordirectory的错误,这里总结了我遇到过的情况:错误 C1083 无法打开包括文件:“MyArray.h”:No......