luogu4151 最大XOR和路径
然后呢这道题其实很简单
我们先考虑一种简单的情况,从1直接走到n(不管怎么走的,反正就是走) 然后就能找到一个路径了
这个走的过程用各种zmj算法都能过
然后呢我们发现如果直接走基本不会得到最优解,考虑模拟退火
考虑增广
一个增广方法是,从某一个点开始走到一个环,在环上走一圈,然后原路返回,如图
然后呢这个图画的有点丑了
我们发现,增广的路径就是环上的路径,往返的路径上两次xor就xor没了,对答案的贡献为0
然后所以我们枚举所有环,把这条环的xor扔进线性基,查询时候直接用1到n的一条路径去查询这个长度被线性基乱搞后的最大值
这题也就蓝题难度吧竟然是黑题
#include <bits/stdc++.h>
using namespace std;
struct edge
{
int v;
long long w;
int ne;
}a[200010];
int n, m, tmp;
int h[50010];
long long dis[50010];
bool vis[50010];
long long linear_basis[70];
void add(int u, int v, long long w)
{
a[++tmp] = (edge){v, w, h[u]};
h[u] = tmp;
}
bool insert(long long x)
{
for (int i = 63; i >= 0; i--)
{
if (x & (1LL << i))
{
if(linear_basis[i] == 0)
{
linear_basis[i] = x;
return true;
}
x ^= linear_basis[i];
}
}
return false;
}
long long query(long long x)
{
for (int i = 63; i >= 0; i--)
if ((x ^ linear_basis[i]) > x)
x ^= linear_basis[i];
return x;
}
void search(int x, long long y)
{
dis[x] = y;
vis[x] = 1;
for (int i = h[x]; i != 0; i = a[i].ne)
if (vis[a[i].v] == 0)
search(a[i].v, y ^ a[i].w);
else
insert(y ^ a[i].w ^ dis[a[i].v]);
}
int main()
{
scanf("%d%d", &n, &m);
long long z;
for (int x, y, i = 1; i <= m; i++)
{
scanf("%d%d%lld", &x, &y, &z);
add(x, y, z);
add(y, x, z);
}
search(1, 0);
printf("%lld\n", query(dis[n]));
return 0;
}
luogu4151 最大XOR和路径的更多相关文章
- 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径
2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 682 Solved: 384[Submit][Stat ...
- BZOJ2337: [HNOI2011]XOR和路径
题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...
- BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )
一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...
- BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]
2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...
- 【BZOJ2337】Xor和路径(高斯消元)
[BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...
- [HNOI2011]XOR和路径 && [HNOI2013]游走
[HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...
- 洛谷 P4151 [WC2011]最大XOR和路径 解题报告
P4151 [WC2011]最大XOR和路径 题意 求无向带权图的最大异或路径 范围 思路还是很厉害的,上午想了好一会儿都不知道怎么做 先随便求出一颗生成树,然后每条返祖边都可以出现一个环,从的路径上 ...
- [WC2011]最大XOR和路径 线性基
[WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部 ...
- P4151 [WC2011]最大XOR和路径
P4151 [WC2011]最大XOR和路径 一道妙极了的题. 首先直接从1走到n 然后现在图上有很多环 所以可以在走到n之后走到环上一个点,再走一遍环,再原路返回.这样就会xor上环的权值. 然后只 ...
随机推荐
- stdin和STDIN_FILENO的区别
STDIN_FILENO与stdin的区别: STDIN_FILENO: 1).数据类型:int 2).层次:系统级的API,是一个文件句柄,定义在<unistd.h>中. 3).相应的函 ...
- linux uid/euid/suid
Each UNIX process has 3 UIDs associated to it. Superuser/root is UID=0. UID Read UID. It is of the u ...
- PHP类(三)-类的封装
设置私有成员 使用private关键字来设置私有成员,完成对成员的封装,封装后的成员在对象的外部不能被访问,如果访问会出现错误,在对象的内部能访问被封装的成员属性和方法. <?php class ...
- eclipse中server location为灰色,不能修改
Eclipse中tomcat service设置发布时间︰选择window ----show view---services可以看到服务的面板双击tomcat进入配置界面Service Locatio ...
- eclipse利用mybatis-generator生成代码
由于mybatis是半自动的ORM框架,表到POJO的映射可以由mybatis-generator完成,映射文件也可以由它生成,下面介绍生成步骤: 1.新建maven项目:File->Other ...
- 获取字符串长度函数length()和hengthb()
oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算stri ...
- 【转】Sublime Text2中的快捷键一览表(Sublime 键盘快捷键大全 )
Sublime Text 提供了无比强大的快捷键阵容,如果能够在Coding的时候灵活的使用快捷键,将能够使得你的效率倍增,相信在不久的将来,Sublime Text将是你跨平台使用的最佳Coding ...
- python爬虫--常见错误
1)socket.error: [Errno 10054] ython socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.因为对一个网站大量的使用urlopen ...
- madplay的使用方法
管理madplay的主程序,包括播放,暂停播放,恢复播放,停止播放 system("madplay north.mp3 &");//利用system函数调用madplay播 ...
- JAVA基础知识总结7(抽象类 | 接口)
抽象类: abstract 1.抽象:不具体,看不明白.抽象类表象体现. 2.在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abs ...