Xor路

(xor.pas/c/cpp)128MB1s

给定一棵有N个点和N-1条边的树,请你求出树中的最长路径,以及总共有多少条最长路径。

这里路径长度是用xor定义的,即若经过的边的权值为a1, a2, a3,...,an,则这条路径的总权值为 a1 xor a2 xor a3 ... xor an。

输入格式

第1行为一个正整数 N,为点的个数。

第2行至第N行,每行包含三个正整数x,y,z,表示x和y之间有一条权值为z的边。

输出格式

仅一行,包含两个数字,为最长路径的长度和条数。

样例输入

4

1 2 3

2 4 1

1 3 4

样例输出

7 1

样例解释

2-1-3 这条路径,长度为3 xor 4=7。

————————————————————————————————————————————————

首先xor满足 a&a=0

这样之后我们求两个点之间的路径就可以随便找一个点作为树的跟两个点之间的路径就是两个点到跟的路径的xor

这样问题就转换成了给你n个数求两个点亦或和最大值以及方案数

这个n^2明显会超时 但是利用xor的性质 我们可以利用tire来维护 复杂度nlogn

#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
const int M=3e5+;
int n,x,y,vis[M],q[M];
LL l[][],h[];
LL T,w,d[M],mx,ans,sum;
int first[M],cnt;
struct node{int to,next; LL w;}e[*M];
void ins(int a,int b,LL w){cnt++; e[cnt].to=b; e[cnt].w=w; e[cnt].next=first[a]; first[a]=cnt;}
void insert(int a,int b,LL w){ins(a,b,w); ins(b,a,w);}
void spfa(){
int head=,tail=;
q[]=; vis[]=;
while(head!=tail){
int x=q[head++]; if(head>M) head=;
for(int i=first[x];i;i=e[i].next){
int now=e[i].to;
if(vis[now]) continue;
vis[now]=; q[tail++]=now; d[now]=d[x]^e[i].w;
if(tail>M) tail=;
}
}
}
void insert(int num){
int x=,now;
for(int i=;i>=;i--){
now=(num&(<<i))>>i;
if(!l[x][now]) l[x][now]=++sum;
x=l[x][now];
}
h[x]++;
}
int find(int num){
int x=,now;
for(int i=;i>=;i--){
now=(num&(<<i))>>i;
if(l[x][!now]) x=l[x][!now],T+=(<<i);
else x=l[x][now];
}
return h[x];
}
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++) scanf("%d %d %lld",&x,&y,&w),insert(x,y,w);
spfa();
for(int i=;i<=n;i++) insert(d[i]);
for(int i=;i<=n;i++){
T=; int p=find(d[i]);
if(T>mx) mx=T,ans=p;
else if(T==mx) ans+=p;
}
printf("%lld %lld\n",mx,ans>>);
return ;
}

Xor路的更多相关文章

  1. 【BZOJ 2115】【WC 2011】Xor

    计算1到n的一条路径使得路径上的值xor和最大. 先任意走一条路径计算xor和,然后dfs的时候处理出所有的环的xor和,这样对于所有的环的xor和求线性基,在任意走出的路径的xor和上贪心即可. 正 ...

  2. 【BZOJ-2115】Xor 线性基 + DFS

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2142  Solved: 893[Submit][Status] ...

  3. BZOJ2115 [Wc2011] Xor

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  4. HDU 4825 Xor Sum(经典01字典树+贪心)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

  5. Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

    Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy   Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用 ...

  6. BZOJ 2115: [Wc2011] Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2794  Solved: 1184 [Submit][Stat ...

  7. BZOJ.2115.[WC2011]Xor(线性基)

    题目链接 \(Description\) 给定一张无向带边权图(存在自环和重边).求一条1->n的路径,使得路径经过边的权值的Xor和最大.可重复经过点/边,且边权和计算多次. \(Soluti ...

  8. GO语言的进阶之路-网络安全之proxy

    GO语言的进阶之路-网络安全之proxy 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在党的带领下,我们大陆的孩子身心健康还是杠杠的,尤其是像我这种农村孩纸,从来不会像<人 ...

  9. P4151 [WC2011]最大XOR和路径

    P4151 [WC2011]最大XOR和路径 一道妙极了的题. 首先直接从1走到n 然后现在图上有很多环 所以可以在走到n之后走到环上一个点,再走一遍环,再原路返回.这样就会xor上环的权值. 然后只 ...

随机推荐

  1. testC-I

    总时间限制:  20000ms 单个测试点时间限制:  1000ms 内存限制:  128000kB 描述 给你一组数,a1,a2,a3,⋯,an. 令:G=gcd(a1,a2,a3,⋯,an) 现在 ...

  2. 洛谷P3374树状数组1

    下有彩蛋(from https://www.cnblogs.com/wuwangchuxin0924/p/5921130.html)树状数组的blog写的最好的是这位//https://www.cnb ...

  3. iftop工具指令选项记录

    iftop是实时监控网卡流量的工具,功能十分强大,指令选项非常多,用法比较复杂,下面记录一下命令的选择作用 相关参数及说明 1.iftop界面相关说明 界面上面显示的是类似刻度尺的刻度范围,为显示流量 ...

  4. 项目实战8.1—tomcat企业级Web应用服务器配置与会话保持

    分类: Linux架构篇   tomcat企业级Web应用服务器配置与实战 环境背景:公司业务经过长期发展,有了很大突破,已经实现盈利,现公司要求加强技术架构应用功能和安全性以及开始向企业应用.移动A ...

  5. Shell脚本使用汇总整理——达梦数据库备份脚本

    Shell脚本使用汇总整理——达梦数据库备份脚本 Shell脚本使用的基本知识点汇总详情见连接: https://www.cnblogs.com/lsy-blogs/p/9223477.html 脚本 ...

  6. python 正则表达式与JSON字符串

    目录 正则表达式 概括单字符集 匹配单字符 匹配字符集 普通字符与元字符 元字符和普通的字符的混用 数量词{整数|*|+|?} 匹配指规则的字母 贪婪模式 匹配指定长度的字符串 非贪婪模式 匹配指定长 ...

  7. kubectl alias auto complete

    平时kubectl命令管理kubernetes,敲久了就觉得比较麻烦,想着使用alias k来代替kubectl,可是当输入k时没有了自动补全的功能 这里在 ~/.bashrc 添加如下配置后,可以自 ...

  8. 算法训练 Eurodiffusion

    Eurodiffusion /***********并未完全AC***********/ #include<iostream> #include<algorithm> #inc ...

  9. PAT Basic 1083

    1083 是否存在相等的差 给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否 ...

  10. 给B公司的一些建议(又一篇烂尾的文章)

    感慨:太多太多的悲伤故事,发生在自己身上,发生在自己的身边.因此,为了避免总是走"弯路",走"错误"的道路,最近一直在完善自己的理论模型. 烂尾说明:本文是一篇 ...