然后呢这道题其实很简单

我们先考虑一种简单的情况,从1直接走到n(不管怎么走的,反正就是走) 然后就能找到一个路径了

这个走的过程用各种zmj算法都能过

然后呢我们发现如果直接走基本不会得到最优解,考虑模拟退火

考虑增广

一个增广方法是,从某一个点开始走到一个环,在环上走一圈,然后原路返回,如图

然后呢这个图画的有点丑了

我们发现,增广的路径就是环上的路径,往返的路径上两次xor就xor没了,对答案的贡献为0

然后所以我们枚举所有环,把这条环的xor扔进线性基,查询时候直接用1到n的一条路径去查询这个长度被线性基乱搞后的最大值

这题也就蓝题难度吧竟然是黑题

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct edge
  4. {
  5. int v;
  6. long long w;
  7. int ne;
  8. }a[200010];
  9. int n, m, tmp;
  10. int h[50010];
  11. long long dis[50010];
  12. bool vis[50010];
  13. long long linear_basis[70];
  14. void add(int u, int v, long long w)
  15. {
  16. a[++tmp] = (edge){v, w, h[u]};
  17. h[u] = tmp;
  18. }
  19. bool insert(long long x)
  20. {
  21. for (int i = 63; i >= 0; i--)
  22. {
  23. if (x & (1LL << i))
  24. {
  25. if(linear_basis[i] == 0)
  26. {
  27. linear_basis[i] = x;
  28. return true;
  29. }
  30. x ^= linear_basis[i];
  31. }
  32. }
  33. return false;
  34. }
  35. long long query(long long x)
  36. {
  37. for (int i = 63; i >= 0; i--)
  38. if ((x ^ linear_basis[i]) > x)
  39. x ^= linear_basis[i];
  40. return x;
  41. }
  42. void search(int x, long long y)
  43. {
  44. dis[x] = y;
  45. vis[x] = 1;
  46. for (int i = h[x]; i != 0; i = a[i].ne)
  47. if (vis[a[i].v] == 0)
  48. search(a[i].v, y ^ a[i].w);
  49. else
  50. insert(y ^ a[i].w ^ dis[a[i].v]);
  51. }
  52. int main()
  53. {
  54. scanf("%d%d", &n, &m);
  55. long long z;
  56. for (int x, y, i = 1; i <= m; i++)
  57. {
  58. scanf("%d%d%lld", &x, &y, &z);
  59. add(x, y, z);
  60. add(y, x, z);
  61. }
  62. search(1, 0);
  63. printf("%lld\n", query(dis[n]));
  64. return 0;
  65. }

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. jackson 进行json与java对象转换 之二

    主要用于测试学习用jackson包实现json.对象.Map之间的转换. 1.准备测试用的Java类 (1)Link类 package test; /** * Description: 联系方式,被u ...

  2. 问题:oracle DECLARE 变量重复利用;结果:Oracle 定义变量总结

    首先,当在cmd里办入scott密码提示错误时,可以这样改一下,scott的解锁命令是: 以system用户登录:cmdsqlplus system/tigertigeralter user scot ...

  3. 问题:c# json解析;结果:c# 解析JSON的几种办法

    c# 解析JSON的几种办法 欲成为海洋大师,必知晓海中每一滴水的真名. 刚开始只是想找一个转换JSON数组的方法,结果在MSDN翻到一大把. 搜索过程中免不了碰到一大堆名词:WCF => Da ...

  4. JavaScript实现重置表单(reset)的方法

    转自:https://www.jb51.net/article/63305.htm <!DOCTYPE html> <html> <head> <script ...

  5. NSOperation/NSOperationQueue详细使用介绍

      一.简介 (1)是使用GCD实现的一套Objective-C的API (2)是面向对象的线程技术 (3)提供了一些在GCD中不容易实现的特性,如:限制最大并发数量.操作之间的依赖关系   NSOp ...

  6. OpenGL 着色器 03

    着色器(shader)是运行在GPU上小程序. 也是一种非常独立的程序,它们之间不能相互通信:它们之间唯一的沟通只有通过输入和输出. 着色器的开头总是要声明版本,接着是输入和输出变量,uniform和 ...

  7. dp-矩阵连乘

    参考:http://blog.csdn.net/liufeng_king/article/details/8497607 使用备忘录算法复杂度降至O(n^3) #include<stdio.h& ...

  8. ThinkPHP的URL模式

    ThinkPHP的URL模式有四种,默认是PATHINFO模式,其他三种分别为:普通模式.REWRITE和兼容模式. 一.PATHINFO模式 浏览器输入格式为: http://localhost/d ...

  9. SimpleDateFormat-多线程问题

    SimpleDateFormat-多线程问题: SimpleDateFormat类在多线程环境下中处理日期,极易出现日期转换错误的情况 import java.text.ParseException; ...

  10. easyui layout 折叠之后显示标题

    方法一:重载扩展panel收缩事件 (function($){ var buttonDir = {north:'down',south:'up',east:'left',west:'right'}; ...