【题目分析】

显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可。

但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有的简单环都可以经过各种各样的异或得到。

然后线性基,在从高位向低位贪心即可,至于证明,需要拟阵的相关知识。

【代码】

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <cmath>
  5.  
  6. #include <set>
  7. #include <map>
  8. #include <string>
  9. #include <algorithm>
  10. #include <vector>
  11. #include <iostream>
  12. #include <queue>
  13. using namespace std;
  14.  
  15. #define maxn 100005
  16. #define ll long long
  17.  
  18. int read()
  19. {
  20. int x=0,f=1; char ch=getchar();
  21. while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
  22. while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();}
  23. return x*f;
  24. }
  25.  
  26. int h[maxn],to[maxn<<1],ne[maxn<<1];
  27. ll w[maxn<<1];
  28. int en=0,n,m,vis[maxn],tot=0;
  29. ll a[maxn<<1];
  30. ll dis[maxn];
  31.  
  32. void add(int a,int b,ll c)
  33. {
  34. to[en]=b;
  35. w[en]=c;
  36. ne[en]=h[a];
  37. h[a]=en++;
  38. }
  39.  
  40. void dfs(int k)
  41. {
  42. // printf("dfs on %d\n",k);
  43. vis[k]=1;
  44. for (int i=h[k];i>=0;i=ne[i])
  45. {
  46. if (!vis[to[i]])
  47. {
  48. dis[to[i]]=dis[k]^w[i];
  49. dfs(to[i]);
  50. }
  51. else a[++tot]=dis[k]^dis[to[i]]^w[i];
  52. }
  53. }
  54.  
  55. ll lb[64],ans;
  56.  
  57. int main()
  58. {
  59. memset(h,-1,sizeof h);
  60. scanf("%d%d",&n,&m);
  61. for (int i=1;i<=m;++i)
  62. {
  63. int a,b; ll c;
  64. scanf("%d%d%lld",&a,&b,&c);
  65. add(a,b,c);
  66. add(b,a,c);
  67. }
  68. dfs(1);
  69. ans=dis[n];
  70. // for (int i=1;i<=n;++i) cout<<dis[i]<<" "; cout<<endl;
  71. // for (int i=1;i<=tot;++i) cout<<a[i]<<" ";cout<<endl;
  72. for (int i=1;i<=tot;++i)
  73. {
  74. for (int j=63;j>=0;j--)
  75. {
  76. if ((a[i]>>j)&1){
  77. if (!lb[j]) {lb[j]=a[i];break;}
  78. else a[i]^=lb[j];
  79. }
  80. }
  81. }
  82. for (int i=63;i>=0;i--)
  83. if (lb[i]&&((ans>>i)&1)==0) ans^=lb[i];
  84. cout<<ans<<endl;
  85. return 0;
  86. }

  

BZOJ 2115 [Wc2011] Xor ——线性基的更多相关文章

  1. BZOJ.2115.[WC2011]Xor(线性基)

    题目链接 \(Description\) 给定一张无向带边权图(存在自环和重边).求一条1->n的路径,使得路径经过边的权值的Xor和最大.可重复经过点/边,且边权和计算多次. \(Soluti ...

  2. BZOJ 2115: [Wc2011] Xor 线性基 dfs

    https://www.lydsy.com/JudgeOnline/problem.php?id=2115 每一条从1到n的道路都可以表示为一条从1到n的道路异或若干个环的异或值. 那么把全部的环丢到 ...

  3. BZOJ 2115: [Wc2011] Xor DFS + 线性基

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Description Input 第一行包含两个整数N和 M, 表示该无向图中 ...

  4. BZOJ 2115: [Wc2011] Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2794  Solved: 1184 [Submit][Stat ...

  5. bzoj 2115: [Wc2011] Xor xor高斯消元

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 797  Solved: 375[Submit][Status] ...

  6. bzoj 2115: [Wc2011] Xor【线性基+dfs】

    -老是想到最长路上 其实可以这样:把每个环的xor和都存起来,然后任选一条1到n的路径的xor和ans,答案就是这个ans在环的线性基上跑贪心. 为什么是对的--因为可以重边而且是无相连通的,并且对于 ...

  7. bzoj 2115 [Wc2011] Xor 路径最大异或和 线性基

    题目链接 题意 给定一个 \(n(n\le 50000)\) 个点 \(m(m\le 100000)\) 条边的无向图,每条边上有一个权值.请你求一条从 \(1\)到\(n\)的路径,使得路径上的边的 ...

  8. BZOJ2115:[WC2011] Xor(线性基)

    Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...

  9. BZOJ - 2115 独立回路 线性基

    题意:给定一个图集\((V,E)\),求路径\(1...n\)的最大异或和,其中重复经过的部分也会重复异或 所求既任意一条\(1...n\)的路径的异或和,再异或上任意独立回路的组合的异或和(仔细想想 ...

随机推荐

  1. Java+jquery实现裁剪图片上传到服务器

    大体分两步: 1.利用jquery裁剪图片,把裁剪到的几个点传入后端 2.利用前端传入的几个点,来裁剪图片 首先,用到一个jquery的插件 imgAreaSelect 实例及插件下载地址:http: ...

  2. Hibernate的关联映射关系

    一:多对一 <many-to-one 1.name:当前类的属性名(关联映射的类) 2.column:属性多对应的类的对应的表的外键(连接条件) 3.class:属性所对应的类的权限定名 4.n ...

  3. spring aop的使用

    使用上次整合的s2sh工程,加入aop的功能.aop(面向切面编程)是一种对oop的完善,比如在进行数据库操作的时候执行方法前或者后加入一条日志记录,使用一个额外的类去做日志操作,让dao类专注地做它 ...

  4. Redis中持久化的两种方法详解

    Redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里;另一种方法教只追加文件(append-only f ...

  5. Google Map API Version3 :代码添加和删除marker标记

    转自:http://blog.sina.com.cn/s/blog_4cdc44df0100u80h.html Google Map API Version3 教程:在地图 通过代添加和删除mark标 ...

  6. Activity初接触

    Activity中TextView的文字显示Hello Android: 1.直接显示:<TextView android:text="Hello Android" /> ...

  7. java8入门 错误:找不到或者无法加载主类

    如果你也遇上的这个问题,但是如果你的Java版本不是6以上,这个解决方案可能就不适合你... 最近在跟着李兴华老湿的视频<<编程开发入门Java 8>>的学习Java... 但 ...

  8. 一段freemarker高级分页效果的代码

    <a onclick="page(1)">首页</a> [#if currpage != 1] [#assign last=currpage - 1] &l ...

  9. CF memsql Start[c]UP 2.0 A

    CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...

  10. Shell入门教程:Shell的基本结构

    shell程序的基本组成结构 shell结构大体是由设定变量.内置命令.shell的语法结构.函数组成. 使用实例说明:test.sh #!/bin/bash #说明使用/bin/bash作为这个脚本 ...