博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj2115][Wc2011] Xor
阅读量:5172 次
发布时间:2019-06-13

本文共 1189 字,大约阅读时间需要 3 分钟。

给定一张n个点m条边的无向图,你要求一条路径,使得路径上的边的权值的异或和最大。

n<=50000,m<=100000 w<=10^18

题解:先把图上的环全部找出来,用异或和更新线性基,然后任选一条从1到n的路径,求一个最大异或和就好了。

因为来回走异或值为0,所以就算这条路径不是最优的也没关系,我们可以看作它和最优路径形成了一个环,在处理这个环时候就把它换成了最优的。同理就算一个环离路径很远也是可以滴。

#include
#include
#define MK 62#define MM 200000#define MN 50000#define ll long long using namespace std;inline ll read(){ ll x = 0 , f = 1; char ch = getchar(); while(ch < '0' || ch > '9'){ if(ch == '-') f = -1; ch = getchar();} while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();} return x * f;}ll p[MK+5],w[MN+5];bool inq[MN+5];int n,m,head[MN+5],cnt=0;struct edge{
int to,next;ll w;}e[MM+5];void ins(int f,int t,ll w){ e[++cnt]=(edge){t,head[f],w};head[f]=cnt;}void ins(ll x){// cout<<"INS"<
<
=0;j--) if((x&(1LL<
0) { if(!p[j]) {p[j]=x;return;} else x^=p[j]; }}void dfs(int x){// cout<<"dfs"<
<<" "<
<
=0;j--)// printf("%d %d\n",j,w[j]); for(int j=MK;j>=0;j--) ans=max(ans,ans^p[j]); cout<

 

转载于:https://www.cnblogs.com/FallDream/p/bzoj2115.html

你可能感兴趣的文章
单片机编程
查看>>
Filter in Servlet
查看>>
Linux--SquashFS
查看>>
Application Pool Identities
查看>>
2017-3-24 开通博客园
查看>>
【MySQL性能优化】MySQL常见SQL错误用法
查看>>
Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
查看>>
Struts 2 常用技术
查看>>
树形DP
查看>>
python flask解决上传下载的问题
查看>>
语法测试
查看>>
CES1
查看>>
CES2
查看>>
文件方式实现完整的英文词频统计实例
查看>>
单个SWF文件loading加载详解(转)
查看>>
SQLServer中的CTE通用表表达式
查看>>
C# 3.0 LINQ的准备工作
查看>>
静态代码审查工具FxCop插件开发(c#)
查看>>
创建代码仓库
查看>>
理解裸机部署过程ironic
查看>>