然后呢这道题其实很简单

我们先考虑一种简单的情况,从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和路径的更多相关文章

  1. 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 682  Solved: 384[Submit][Stat ...

  2. BZOJ2337: [HNOI2011]XOR和路径

    题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...

  3. BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )

    一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...

  4. BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]

    2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...

  5. 【BZOJ2337】Xor和路径(高斯消元)

    [BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...

  6. [HNOI2011]XOR和路径 && [HNOI2013]游走

    [HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...

  7. 洛谷 P4151 [WC2011]最大XOR和路径 解题报告

    P4151 [WC2011]最大XOR和路径 题意 求无向带权图的最大异或路径 范围 思路还是很厉害的,上午想了好一会儿都不知道怎么做 先随便求出一颗生成树,然后每条返祖边都可以出现一个环,从的路径上 ...

  8. [WC2011]最大XOR和路径 线性基

    [WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部 ...

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

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

随机推荐

  1. 应用HTMLTestRunner整合测试报告

    为了便于测试脚本的维护,以及更多测试用例的管理,于是根据上次学习的HTMLTestRunner生成的测试报告,今天将对其进行整理.我们之前使用 TestSuite 只是在一个.py 文件里添加多个测试 ...

  2. 2015.9.28 不能将多个项传入“Microsoft.Build.Framework.ITaskItem”类型的参数 问题解决

    方法是:项目->属性->安全性->启用ClickOnce安全设置, 把这个复选框前面的勾去掉就可以了.

  3. springmvc+spring3+hibernate4框架简单整合,简单实现增删改查功能

    转自:https://blog.csdn.net/thinkingcao/article/details/52472252 C 所用到的jar包     数据库表 数据库表就不用教大家了,一张表,很简 ...

  4. docker 笔记(3)第一个dockerfile

    #vim Dockerfile FROM ubuntu RUN apt-get update && apt-get install -y vim #docker build -t ub ...

  5. [Python Study Notes]行人检测

    # -------------------------------------------------------------- # @文件: 行人识别.py # @工程: blog # @时间: 2 ...

  6. 百度Apollo解析——3.common

    1.略读 该目录下主要提供了各个模块公用的函数和class以及一些数学API还有公共的宏定义. 在Apollo 1.0中,common是整个框架的基础.configs是配置文件加载.adapters是 ...

  7. MyBatis02 MyBatis基础知识之Mapper映射器

    1 Mapper映射器是什么 是符合映射文件要求的接口 接口要求 a. 方法名要与sql的id一致. b. 方法的参数类型要与parameterType一致. c. 方法的返回类型要与resultTy ...

  8. ann

    转自 http://blog.csdn.net/yiluoyan/article/details/45308785 这篇文章接着之前的车牌识别,从输入的车图片中分割识别出车牌之后,将进行下一步:车牌号 ...

  9. php学习笔记-continue和break

    这两个关键字经常被用在循环中,但作用是完全不同的. 在循环中遇到continue这个单词的时候一定要理解为skip,跳过或者略过,啥意思?就是跳过本次循环,后面的循环继续走起来,老铁. break是说 ...

  10. Linux脚本设计4——一些实用程序

    实用程序1:列目录 #!/bin/bash path=`echo $PATH | sed 's/:/ /g'` for d in $path do echo $d done 这是一个for循环,注意p ...