这种路径异或问题,可以转换为一条路径和若干个环的线性组合,然后就能用线性基搞了。

复习了一波线性基。

#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define PLI pair<LL, int>
#define ull unsigned long long
using namespace std; const int N = 1e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ; int n, m;
LL d[N];
bool vis[N];
vector<PLI> edge[N];
struct Base {
vector<LL> a;
void add(LL x) {
for(int i = ; i < a.size(); i++)
x = min(x, x^a[i]);
if(!x) return;
for(int i = ; i < a.size(); i++)
a[i] = min(a[i], a[i]^x);
a.push_back(x);
}
LL getMx(LL ans) {
for(int i = ; i < a.size(); i++)
ans = max(ans, ans^a[i]);
return ans;
}
} base; void dfs(int u, int fa) {
vis[u] = true;
for(int i = ; i < edge[u].size(); i++) {
int v = edge[u][i].se; LL w = edge[u][i].fi;
if(v == fa) continue;
if(vis[v]) {
base.add(d[u]^d[v]^w);
} else {
d[v] = d[u] ^ w;
dfs(v, u);
}
}
}
int main() {
scanf("%d%d", &n, &m);
for(int i = ; i <= m; i++) {
int u, v; LL w;
scanf("%d%d%lld", &u, &v, &w);
edge[u].push_back(mk(w, v));
edge[v].push_back(mk(w, u));
}
dfs(, );
printf("%lld\n", base.getMx(d[n]));
return ;
} /*
*/

最新文章

  1. 做的一个HTML表白页面
  2. CSS之border-radius
  3. C# UdpClient 设置超时时间
  4. Tomcat配置虚拟主机后的登录验证码问题
  5. 测试web数据库的分布式事务atomikos 的三种数据源 SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean
  6. hadoop的ganglia数据监控
  7. Delphi XE5教程8:使用Delphi命名空间
  8. jquery的select元素和option的相关操作
  9. delphi中DLL编程详解
  10. Ling to entity实现分页
  11. 2017《JAVA技术预备作业》 1502 陈明宇
  12. 1049. Counting Ones (30)
  13. Apollo与ROS
  14. Go语言--数组、切片、
  15. angular简介
  16. 【先验知识归纳】Flask快速入门
  17. 合并hive/hdfs小文件
  18. 20175314薛勐 MyCP(课下作业,必做)
  19. python3之MongoDB
  20. e837. 设置JTabbedPane中卡片的颜色

热门文章

  1. Python2和Python3共存安装
  2. bzoj 2081 [Poi2010]Beads hash+调和级数
  3. 010. C++ 传值与传引用
  4. js-之闭包的理解
  5. OD~~helloworld
  6. 数据库-Core Data
  7. 【译】msfvenom
  8. Django初探(模板渲染、模板语音、simple_tag、母版子版、静态配置文件)
  9. Bootstrap文件上传组件:bootstrap fileinput
  10. php审计学习:xdcms2.0.8注入