【BZOJ】2115: [Wc2011] Xor
http://www.lydsy.com/JudgeOnline/problem.php?id=2115
题意:给出一个n个点m条边的无向连通边加权图,求1~n的某条路径使得异或值最大(可以重复点可以重复边)(n<=50000, m<=100000)
#include <bits/stdc++.h>
using namespace std;
const int N=50005, M=100015;
typedef long long ll;
struct E { int next, to; ll w; }e[M<<1];
int cnt, ihead[N], tot, n, m;
ll d[N], q[M*10], a[65];
void add(int u, int v, ll c) {
e[++cnt]=(E){ihead[u], v, c}; ihead[u]=cnt;
e[++cnt]=(E){ihead[v], u, c}; ihead[v]=cnt;
}
bool vis[N];
void dfs(int x) {
vis[x]=1;
for(int i=ihead[x]; i; i=e[i].next)
if(!vis[e[i].to]) d[e[i].to]=d[x]^e[i].w, dfs(e[i].to);
else q[++tot]=d[e[i].to]^d[x]^e[i].w;
}
int main() {
scanf("%d%d", &n, &m);
for(int i=0; i<m; ++i) { int x, y; ll w; scanf("%d%d%lld", &x, &y, &w); add(x, y, w); }
dfs(1);
for(int i=1; i<=tot; ++i)
for(int j=60; j>=0; --j) if((q[i]>>j)&1) {
if(!a[j]) { a[j]=q[i]; break; }
else q[i]^=a[j];
}
ll ans=d[n];
for(int j=60; j>=0; --j) if(!((ans>>j)&1)) ans^=a[j];
printf("%lld\n", ans);
return 0;
}
//PS:一下都是在本人什么都不懂的情况下乱写的,大家请有选择性的查看= =.....(体现了sb iwtwiioi是多么的弱(我就懒得删了..反正大概就是找出一组线性无关的元素,然后就能组成整个向量空间了= =然后就行了..
好题不解释..
首先去学习了一下线性基。这里说的线性基在这里具体是指某个向量数组在xor操作下形成的封闭集合中的线性无关量。我们求出这些基后就能很简单的贪心求出答案了。
然后再学习了一个特殊的性质= =在生成树上的非树边所形成的环在xor的情况下能表示出所有环的xor值(这个yy了好久证明不出,只能手工验证正确性..大概就是每一个非树边都存在有且一个所求出的环中,然后用一些环进行xor抵消掉一些树边然后就形成了新的环)
基的个数上界就是$O(log(n))$
然后我们只需要通过高斯消元求出每一位都独立的一个元素那么可以当成一个基,最后一定会出现一组基...大小为$O(log(n)), n为向量的大小$,也就是说,某个基的最高位存在而其它基都不存在这个位。
由于xor操作的封闭性,我们只需要像高斯消元一样消去某一位上其它元素的值即可。
回到本题...
由于一条1~n的路径可以由任意一条1~n的简单路径加上任意个环组成。(从简单路径中进入环的路径和出环的路径(同一条)xor抵消)
由之前所说,非树边的环可以线性组成所有环的xor值,所以我们直接搞就行了...
(ps:诶呀诶呀一定要强拉到基吗...最好理解的就是,我要贪心,所以我要变成一些数使得最高位只有一个数有其他数没有,而且这些数能线性组合成之前的向量所能组成的所有数。就行了你们说是不是,sb iwtwiioi还扯了一大版自己都不懂的东西
【BZOJ】2115: [Wc2011] Xor的更多相关文章
- 【BZOJ】2337: [HNOI2011]XOR和路径 期望+高斯消元
[题意]给定n个点m条边的带边权无向连通图(有重边和自环),在每个点随机向周围走一步,求1到n的期望路径异或值.n<=100,wi<=10^9. [算法]期望+高斯消元 [题解]首先异或不 ...
- 【题解】 bzoj2115: [Wc2011] Xor (线性基+dfs)
bzoj2115,戳我戳我 Solution: 看得题解(逃,我太菜了,想不出这种做法 那么丢个链接 Attention: 板子别写错了 又写错了这次 \(long long\)是左移63位,多了会溢 ...
- BZOJ 2115: [Wc2011] Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2794 Solved: 1184 [Submit][Stat ...
- bzoj 2115: [Wc2011] Xor xor高斯消元
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 797 Solved: 375[Submit][Status] ...
- BZOJ 2115: [Wc2011] Xor DFS + 线性基
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Description Input 第一行包含两个整数N和 M, 表示该无向图中 ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
随机推荐
- C# 一些常用的技巧代码
1.字符串风格成字符数组: 比如将字符串:23$123$45$转换成int[]这样的数组,你该怎么转换?其实你不用写那么的for循环,只需要一句话: int [] Relst =Array.Conve ...
- Python无类再理解--metaclass,type
上次理解过一次,时间久了,就忘了.. 再学习一次.. http://blog.jobbole.com/21351/ ======================= 但是,Python中的类还远不止如此 ...
- “init terminating in do_boot” Windows10 Rabbit MQ fails to start
在Windows 10环境下安装rabbitmq-server-3.6.2后,CMD中运行命令:rabbitmq-plugins enable rabbitmq_management 报错: { , ...
- Async/Await 最佳实践
其实好久以前就看过这个文章,以及类似的很多篇文章.最近在和一个新同事的交流中发现原来对async的死锁理解不是很透彻,正好最近时间比较充裕就再当一回搬运工. 本文假定你对.NET Framework ...
- 在ASP.NET 5中如何方便的添加前端库
(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:ASP.NET 5和之前的ASP.NET版本有很大的不同,其中之一就是对前端库的管理不再使用Nuget,而 ...
- hibernate 关联映射
关联关系大致分为两大类: 1.单向关系:只需单向访问关联端.例如:只能通过老师访问学生,或者只能通过学生访问老师. 2.双向关系:关联的两端可以互相访问.例如:老师和学生之间可以互相访问. 单向关联可 ...
- Java学习随笔4:Java的IO操作
1. IO流的作用是读写设备上的数据,如硬盘文件.内存.键盘.网络等.根据数据走向,可分为:输入流和输出流:根据处理的数据类型,可分为:字节流和字符流.字节流可以处理所有类型的数据,如MP3.图片.视 ...
- HTML5_ScrollInToView方法
scrollIntoView(ture)元素上边框与视窗顶部齐平 scrollIntoView(false)元素下边框与视窗底部齐平 <html> <head> <tit ...
- 【前台 】字符串和js对象的相互转化
利用原生JSON对象,将对象转为字符串 var jsObj = {}; jsObj.testArray = [1,2,3,4,5]; jsObj.name = 'CSS3'; jsObj.date = ...
- JMeter中的场景执行持续时间设置
jmeter之调度器配置 JMeter的线程组设置里有一个调配器设置,用于设置该线程组下脚本执行的开始时间.结束时间.持续时间及启动延迟时间.当需要半夜执行性能测试时会用到这个功能. 设置调度器配置, ...