啦啦啦


题意:

N 个点M条边的边带权的无向图,求1到n一条XOR和最大的路径


感觉把学的东西都用上了....

1到n的所有路径可以由一条1到n的简单路径异或上任意个简单环得到

证明:

如果环与路径有交,异或后那块交就没了,相当于那块走了环上的路径;

如果环与路径没交,就是走到环上走一圈在回来,一去一回其他的地方又没了。

求一棵生成树,然后每一条非树边构成一个环,一共$m-n+1$个环

然后答案就是任取一些环的异或和与1到n路径异或和异或的最大值啦

实现上注意:

1.求生成树和简单环的异或和一遍DFS就可以

2.因为加了无向边,所以一条非树边可能贡献了两个方程,空间要开两倍(或者标记一下)

3.最后求最大值两种写法

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <bitset>
using namespace std;
typedef long long ll;
const int N=5e4+,M=1e5+,INF=1e9;
inline ll read(){
char c=getchar();ll x=;
while(c<''||c>''){c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x;
}
int n,m,u,v,p;
ll w,a[M],bin[];
struct edge{
int u,v,ne;
ll w;
}e[M<<];
int h[N],cnt;
inline void ins(int u,int v,ll w){
cnt++;
e[cnt].u=u;e[cnt].v=v;e[cnt].w=w;e[cnt].ne=h[u];h[u]=cnt;
cnt++;
e[cnt].u=v;e[cnt].v=u;e[cnt].w=w;e[cnt].ne=h[v];h[v]=cnt;
}
ll d[N];
bool vis[N],use[M<<];
void dfs(int u){
vis[u]=;
for(int i=h[u];i;i=e[i].ne){
int v=e[i].v;
if(!vis[v]){
d[v]=d[u]^e[i].w;
dfs(v);
}else if(!use[((i-)^)+]) a[++p]=d[u]^d[v]^e[i].w,use[i]=;
}
}
void ini(){
bin[]=;for(int i=;i<=;i++) bin[i]=bin[i-]<<;
}
int now,pivot[N];
void Gauss(int n){
now=;
for(int i=;i>=;i--){
int j=now;
while(j<=n&&!(a[j]&bin[i])) j++;
if(j==n+) continue;
if(j!=now) swap(a[j],a[now]);
for(int k=;k<=n;k++)
if(k!=now&&(a[k]&bin[i])) a[k]^=a[now];
pivot[i]=now;
now++;
}
now--;
}
int main(){
freopen("in","r",stdin);
ini();
n=read();m=read();
for(int i=;i<=m;i++) u=read(),v=read(),w=read(),ins(u,v,w);
dfs();
Gauss(p);
ll b=d[n];
//printf("dn %lld\n",d[n]);
for(int i=;i>=;i--) if(!(b&bin[i])) b^=a[pivot[i]];
//for(int i=1;i<=now;i++) b=max(b,b^a[i]);
printf("%lld\n",b);
}

BZOJ 2115: [Wc2011] Xor [高斯消元XOR 线性基 图]的更多相关文章

  1. 【bzoj4269】再见Xor 高斯消元求线性基

    题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...

  2. HDU3949/AcWing210 XOR (高斯消元求线性基)

    求第k小的异或和,用高斯消元求更简单一些. 1 //用高斯消元求线性基 2 #include<bits/stdc++.h> 3 using namespace std; 4 #define ...

  3. 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS

    [BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...

  4. BZOJ4269再见Xor——高斯消元解线性基

    题目描述 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. 输入 第一行一个正整数N. 接下来一行N个非负整数. 输出 一行,包含两 ...

  5. 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基

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

  6. 【bzoj3105】[cqoi2013]新Nim游戏 高斯消元求线性基

    题目描述 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从 ...

  7. 【bzoj4004】[JLOI2015]装备购买 贪心+高斯消元求线性基

    题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...

  8. HDU 3949 XOR [高斯消元XOR 线性基]

    3949冰上走 题意: 给你 N个数,从中取出若干个进行异或运算 , 求最后所有可以得到的异或结果中的第k小值 N个数高斯消元求出线性基后,设秩为$r$,那么总共可以组成$2^r$中数字(本题不能不选 ...

  9. 【BZOJ2322】[BeiJing2011]梦想封印 高斯消元求线性基+DFS+set

    [BZOJ2322][BeiJing2011]梦想封印 Description 渐渐地,Magic Land上的人们对那座岛屿上的各种现象有了深入的了解. 为了分析一种奇特的称为梦想封印(Fantas ...

  10. BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基

    BZOJ严重卡精,要加 $long$  $double$ 才能过. 题意:求权和最小的极大线性无关组. 之前那个方法解的线性基都是基于二进制拆位的,这次不行,现在要求一个适用范围更广的方法. 考虑贪心 ...

随机推荐

  1. 搭建vue开发环境的步骤

    相信很多人在刚开始学习vue这个框架的时候,在最开始搭建开发环境的时候,都会遇到一些大大小小的坑,我之前在学习angular的时候搭建过一次,过了一个月后在搭建第二次的时候,竟然有一些混乱,所以今天想 ...

  2. Mysql隔离级别,锁与MVCC

    关键词:事务,ACID,隔离级别,MVCC,共享锁,排它锁 阅读本文前请先阅读http://hedengcheng.com/?p=771 http://www.hollischuang.com/arc ...

  3. list容器的C++代码实现

    #include <iostream> using namespace std; template  <class T> class mylist;//前置声明 templat ...

  4. JAVA开发中遇到的异常总结

    最常见的五种异常:必会,面试题: 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数 ...

  5. 在vue-cli项目中使用echarts

    这个示例使用 vue-cli 脚手架搭建 安装echarts依赖 npm install echarts -S 或者使用国内的淘宝镜像: 安装 npm install -g cnpm --regist ...

  6. SDK是什么?什么是SDK

    从 SDK导航 看到的 应该比较专业! SDK的英文全名是:software development kit,翻译成中文的意思就是"软件开发工具包" 通俗一点的理解,是指由第三方服 ...

  7. 跟版网 > 织梦教程 > 织梦安装使用 > 织梦DedeCMS附件上传大

    织梦DedeCMS附件上传大小受限制,超过2M就不能上传了,针对此问题按如下方法修改: 1.进入后台→系统设置→系统基本参数→会员设置→会员上传文件大小(K),改成你需要限制的大小: 2.在dede ...

  8. python基础8之自定义模块、if __name__==__main__:解释

    一.自定义模块与使用 python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  9. python 导入模块错误

    问题: 导入一些模块或者运行第三方软件的时候,会出现一下类似错误: ImportError: No module named future.utils 问题原因: 没有安装第三方库 future,这个 ...

  10. synchronized内存可见性理解

    一.背景 最近在看<Java并发编程实战>这本书,看到共享变量的可见性,其中说到"加锁的含义不仅仅局限于互斥行为,还包括内存可见性". 我对于内存可见性第一反应是vol ...