The XOR-longest Path

The XOR-longest Path

https://ac.nowcoder.com/acm/problem/50349

The XOR-longest Path

题目大意

给定一棵树, 让你求树上异或和最大的简单路径的异或和

分析

想要异或和最大, 那么我们想要的显然是贪心, 那就是尽量让他们在二进制下不相同

这样考虑的话, 我们可以想到的是字典树, 从高次项向低处贪心, 能保证最值

那么还有一个问题, 如何求一个简单路径的异或值?

我们又可以想到关于异或的优良性质:

就是说, 可以随机找一个根, 求到其他所有结点的链的路径异或和

如果我们要求的是, 那么它就可以十分简单的表示为

那么我们把所有的从根开始的路径插入到字典树中, 暴力查询跟新答案就好惹

#include <cstdio>

const int Maxn = 100000 + 5;
int Tree[Maxn * 31][2], Id;
int Xor[Maxn];
int N, U, V, C, Ans;
int Head[Maxn], Next[Maxn << 1], Edge[Maxn << 1], W[Maxn << 1], Cur;

inline void AddEdge(int U, int V, int C)
{
    Next[++Cur] = Head[U];
    Head[U] = Cur;
    Edge[Cur] = V;
    W[Cur] = C;
}

inline void Insert(int X, int Rt = 0)
{
    for (int i = 1 << 30; i; i >>= 1)
    {
        bool F = X & i;
        if (!Tree[Rt][F]) Tree[Rt][F] = ++Id;
        Rt = Tree[Rt][F];
    }
}

inline int Query(int X, int Rt = 0, int Ans = 0)
{
    for (int i = 1 << 30; i; i >>= 1)
    {
        bool F = X & i;
        if (Tree[Rt][!F]) Ans += i, Rt = Tree[Rt][!F];
        else Rt = Tree[Rt][F];
    }
    return Ans;
}

void DFS(int U, int F)
{
    for (int i = Head[U]; i; i = Next[i])
    {
        if (Edge[i] == F) continue;
        Xor[Edge[i]] = Xor[U] ^ W[i];
        DFS(Edge[i], U);
    }
}

inline int max(int a, int b){return a > b ? a : b;}

int main()
{
    scanf("%d", &N);
    for (int i = 1; i < N; ++i)
    {
        scanf("%d %d %d", &U, &V, &C);
        AddEdge(U, V, C), AddEdge(V, U, C);
    }
    DFS(1, 1);
    for (int i = 1; i <= N; ++i) Insert(Xor[i]);
    for (int i = 1; i <= N; ++i) Ans = max(Ans, Query(Xor[i]));
    printf("%d\n", Ans);
}
有的没的 文章被收录于专栏

RT,有的没的

全部评论

相关推荐

03-25 19:00
东北大学 Java
程序员牛肉:太好了,是聊天记录。不得不信了。 当个乐子看就好,不要散播焦虑
点赞 评论 收藏
分享
点赞 评论 收藏
分享
头像
05-16 12:47
已编辑
中国地质大学(武汉) Java
你出生在农村,与其它农村小孩子无异小学时你对成绩没有概念,只感觉上课不听课也是无聊,只知道不写完作业会被老师罚站一到考试,自己成绩总是名列靠前,即使偶尔落后,你也从不在意中学时你觉得课本的东西很简单,随便学学就会了,并没有大量刷题你总是想不通,那些所谓的数学物理中难题,明明是在送分,为什么你的同学总是想不出解题方法高中时这三年你过的不容易,晚睡早起,给了自己很多压力.但是你也发现自己是有些小聪明的,你感觉班里有些同学很刻苦,但成绩比你差远了。那些数学题和物理题的陷阱,同学一遍遍踩坑,但是你总能发现并避开它们.“为了父母的期盼,为了恩师的厚望,为了天赐的智慧,为了青春的理想......”“天行健...
创作助手_刘北:其实,这种已经是神童级别的了,不费吹灰之力就能拿到自己想要的东西,就像机器按照程序走了一遍,就像我小时候看爱情公寓,觉得他们都很惨,几个人只能挤在一个房间里合租,但是好在他们有一群非常好的朋友,随着时间的推移,慢慢长大了,在看爱情公寓的时候,觉得他们都很厉害,博士、留学生、***、电台公子,数学天才,任何一个都是我可望而不可即的,更别说可以在异地认识一群更好的朋友了,所以呢,人还是要自给自足,满足当下,不要攀比,意气风发的且有理想的18岁少年永远都存在,只不过随着时间的推移他被你包裹在了洋葱的最深处。
点赞 评论 收藏
分享
评论
5
2
分享

创作者周榜

更多
牛客网
牛客企业服务