刷题总结——xor(ssoj)
题目:
题目背景
OURCE:NOIP2015-SHY-7
题目描述
求一棵带边权的树的一条最大 Xor 路径的值。这里的“路径”不一定从根到叶子结点,中间一段路径只要满足条件也可以。
输入格式
第一行,一个整数 N ,表示一颗树有 N 个节点,接下来 N-1 行,每行三个整数 a,b,c 表示节点 a 和节点 b 之间有条权值为 c 的边。
输出格式
输出仅一行,即所求的最大值。
样例数据 1
备注
【数据范围】
对 40% 的输入数据 :数据退化为一条链;
另对 10% 的输入数据 :N≤1000;
对 100% 的输入数据 :1≤N≤100000, c≤231-1。
题解:
套路题
首先预处理出所有点到根节点的异或和XOR····然后将其转化成二进制从高位到低位储存到trie树上··容易想到两个点的XOR的异或和就是这两个点的路径的异或和····所以枚举每一个XOR,在trie树上走,从高位开始查找与起位置上的数相反的数是否存在···如果存在优先选择···一边走一边计算答案即可
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<string>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=1e5+;
const int M=4e6+;
int fst[N],go[N*],nxt[N*],val[N*],tot,n,xo[N],maxx,len;
struct node
{
int son[];
}tr[M];
inline int R()
{
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar())
f=(f<<)+(f<<)+c-'';
return f;
}
inline void comb(int a,int b,int v)
{
nxt[++tot]=fst[a],fst[a]=tot,go[tot]=b,val[tot]=v;
nxt[++tot]=fst[b],fst[b]=tot,go[tot]=a,val[tot]=v;
}
inline void dfs(int u,int fa)
{
for(int e=fst[u];e;e=nxt[e])
{
int v=go[e];if(v==fa) continue;
xo[v]=xo[u]^val[e];dfs(v,u);
}
}
inline void insert(int x)
{
int po=;
for(int i=len-;i>=;i--)
{
int temp=(x>>i)&;
if(!tr[po].son[temp]) tr[po].son[temp]=++tot;
po=tr[po].son[temp];
}
}
inline int check(int x)
{
int ans=x,po=;
for(int i=len-;i>=;i--)
{
int temp=(x>>i)&;
if(tr[po].son[temp^]) ans|=(<<i),po=tr[po].son[temp^];
else ans^=(temp<<i),po=tr[po].son[temp];
}
return ans;
}
int main()
{
//freopen("a.in","r",stdin);
n=R();int a,b,c;
for(int i=;i<n;i++)
{
a=R(),b=R(),c=R();maxx=max(maxx,c);comb(a,b,c);
}
dfs(,);int temp=maxx;
while(temp) temp/=,len++;
tot=;
for(int i=;i<=n;i++) insert(xo[i]);
for(int i=;i<=n;i++)
maxx=max(maxx,check(xo[i]));
cout<<maxx<<endl;
return ;
}
刷题总结——xor(ssoj)的更多相关文章
- 「刷题」xor
说实话这道题没有A掉,不过所有的思路都是我自己想的,我觉得这个思路真的很棒很棒很棒的. 首先这个题的题面描述告诉我这种运算有封闭性,满足结合律和交换率,那么其实这个东西是个群运算了,而且这个群有单位元 ...
- 刷题总结——date(ssoj)
题目: 题目背景 SOURCE:NOIP2015-SHY-9 题目描述 小Y和小Z好不容易有机会相见啦,可是邪恶的小H却不想让他们相见.现在有一些城市,城市之间有双向路径相连,有路径相连的城市之间可以 ...
- $2019$ 暑期刷题记录1:(算法竞赛DP练习)
$ 2019 $ 暑期刷题记录: $ POJ~1952~~BUY~LOW, BUY~LOWER: $ (复杂度优化) 题目大意:统计可重序列中最长上升子序列的方案数. 题目很直接的说明了所求为 $ L ...
- [BUUCTF-Pwn]刷题记录1
[BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...
- LeetCode刷题系列
LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...
- ife任务刷题总结(一)-css reset与清除浮动
本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...
- 刷题ING...
我用codeVS刷题.. 努力准备!!
- XidianOJ 1020 ACMer去刷题吧
题目描述 刷题是每个ACMer必由之路,已知某oj上有n个题目,第i个题目小X能做对的概率为Pi(0<=Pi<=1,1<=i<=n) 求小X至少做对k道题的概率 输入 第一行输 ...
- 【BZOJ-4590】自动刷题机 二分 + 判定
4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 156 Solved: 63[Submit][Status ...
随机推荐
- Android(java)学习笔记106:Android设置文本颜色的4种方法
1. Android设置文本颜色的4种方法: (1)利用系统自带的颜色类: tv.setTextColor(android.graphics.Color.RED); (2)数字颜色表示: tv.set ...
- PAT (Basic Level) Practise (中文)- 1015. 德才论 (25)
http://www.patest.cn/contests/pat-b-practise/1015 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡 ...
- NOIP模拟赛 水灾
大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上 ...
- Laravel常用命令
php artisan make:controller BlogController php artisan make:model Blog
- json转换为字典
str---dict ata_dict=json.loads(data)
- Struts2和Spring MVC 区别 今天面试被问到了
虽然说没有系统的学习过Spring MVC框架, 但是工作这么长时间, 基本上在WEB层使用的都是Spring MVC, 自己觉得Struts2也是一个不错的WEB层框架, 这两种框架至今自己还未有比 ...
- Python头脑风暴2
今天想到了一个致富新途径:假如我在X东上班,我写个X宝爬虫,专门爬在X宝买奢侈品的土豪,然后我自己注册个X宝号,用脚本一个个加他们然后给他们发信息说我X东这还有比你更便宜更好的...不知道行不行啊(狗 ...
- Html5_css
CSS 在标签上设置style属性: background-color: #2459a2; height: 48px; ... 编写css样式: 1. 标签的style属性 2. 写在head里面 s ...
- 通过IAR工程文件查看对应IAR版本号
IAR使用技巧——如何使用合适的版本打开IAR工程 2014年07月05日 23:49:08 xukai871105 阅读数:12895 标签: IAR 更多 个人分类: 嵌入式ARM 0.前言 ...
- Post页面爬取失败__编码问题
python3爬取Post页面时, 报以下错误 "POST data should be bytes or an iterable of bytes. It cannot be of typ ...