首页 > 其他分享 >P4551 最长异或路径

P4551 最长异或路径

时间:2024-04-04 15:33:06浏览次数:21  
标签:int 路径 tree P4551 next 异或 path now

原题链接

题解

1.任意两点间的异或和等于他们到根节点的异或和的异或,令每个点到根节点的异或值为 \(path[i]\)
2.建立01字典树,塞入所有 \(path[i]\) 然后遍历每个点,找出每个点异或最大对应的点
3.如何找?往当前 \(path[i]\) 的每一位相反的方向移动

code

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int to,val;
};

vector<node> G[100005];
int cnt=0;
int path[100005];
int tree[2000000][2]={0};
void dfs(int now,int fa)
{
    for(auto next:G[now])
    {
        int to=next.to,val=next.val;
        if(to==fa) continue;
        path[to]=(path[now]^val);
        dfs(to,now);
    }
}


int main()
{
    int n;
    cin>>n;
    for(int i=1;i<n;i++)
    {
        int x,y,v;
        cin>>x>>y>>v;
        G[x].push_back({y,v});
        G[y].push_back({x,v});
    }

    dfs(1,0);


    for(int i=1;i<=n;i++)
    {
        int now=0;
        for(int k=30;k>=0;k--)
        {
            int next=((path[i]>>k)&1);
            if(!tree[now][next]) tree[now][next]=++cnt;
            now=tree[now][next];
        }
    }

    int ans=0;
    for(int i=1;i<=n;i++)
    {
        int now=0,sum=0;
        for(int k=30;k>=0;k--)
        {
            int copys=((path[i]>>k)&1),next=(copys^1);
            if(!tree[now][next]) next^=1;
            now=tree[now][next];
            sum|=((next^copys)<<k);
        }
        ans=max(ans,sum);
    }

    cout<<ans;
    return 0;
}

标签:int,路径,tree,P4551,next,异或,path,now
From: https://www.cnblogs.com/pure4knowledge/p/18114237

相关文章

  • 力扣每日一题:LCR112--矩阵中的最长递增路径
    题目给定一个 mxn 整数矩阵 matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。示例1:输入:matrix=[[9,9,4],[6,6,8],[2,1,1]]输出:4解释:最长递增路径为 [1......
  • floyd求路径
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#include<string.h>#defineR(x)x=read()#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;inlin......
  • Java最短路径算法知识点(含面试大厂题和源码)
    最短路径算法是计算机科学和图论中的核心问题之一,它旨在找到从一个顶点到另一个顶点或在所有顶点之间的最短路径。这个问题在多种实际应用中都非常重要,如网络路由、交通规划、社交网络分析等。以下是一些与最短路径算法相关的知识点:Dijkstra算法:由荷兰计算机科学家艾兹......
  • Nginx服务器根据不同路径转发到不同的服务
    环境说明linux系统版本:lsb_release-a  Nginx版本:1.24.0  .1.配置nginx服务。.a.先配置upsream;backend名字可以自己任意取,里面可以配置多个server;同样upstream也可以配置多个。.b.然后在server中配置location。以下图为例,第一个配置路径配置直接匹配exam,然后将......
  • Android文件管理器选择文件,获得文件路径URI转File
     前情描述:使用系统文件管理器,选择指定文件类型上传。基础知识MIME调起文件管理器指定浏览位置(路径转URI)设置多种文件类型URI转路径1.MIMEMIME(MultipurposeInternetMailExtensions)是描述消息内容类型的因特网标准。finalStringDOC="application/mswo......
  • 【数据库】数据库系列学习4:数据库学习路径
    学习数据库的路径可以分为以下几个阶段,每个阶段都有不同的学习内容和建议:1.初级阶段1.1理论基础学习关系型数据库的基本概念,如表、行、列、键等。了解SQL语言的基本语法和常用操作,包括创建表、插入数据、查询数据、更新数据、删除数据等。1.2实践操作安装并使用一款关......
  • 在静态页中,js和css使用虚拟路径指向网站根目录
    第一步:修改web.config<configuration><system.webServer><handlers><addname="x"verb="GET"path="*.css.ashx"type="FileResolver"/><addname="xx"verb=&quo......
  • java中获取项目路径包路径域名classpath路径buildPath路径
    /** *获取项目路径 *@returnnull或项目路径 *@throwsIOException */ publicstaticStringgetPojectPath(){ Filedirectory=newFile("");//参数为空 try{ returndirectory.getCanonicalPath(); }catch(IOExceptione){ e.printStackT......
  • 几种常见的路径规划算法
    几种常见的路径规划算法路径规划是机器人、自动驾驶车辆、无人机等领域中的关键技术之一,它涉及到如何为移动实体找到从起点到终点的最优或可行路径。随着技术的不断发展,路径规划算法也在不断进步和优化。下面将介绍几种常见的路径规划算法。1.Dijkstra算法Dijkstra算法是一......
  • 最短路径问题(单源最短路问题-都正边)1.0
    基本思路和代码来自y总!朴素版dijkstra算法适合与稠密图,用邻接矩阵来存图#include<bits/stdc++.h>#include<algorithm>usingnamespacestd;intn,m;//intg[520][520];//存图边的值intdist[520];//存最短距离boolst[520];//是否已经遍历过最小的边intdijks......