bzoj 2115
线性基好题
首先,如果一条路径被经过了两次,那么这条路径上的权值等于没有(废话)
基于这一点,我们其实已经找到了解决问题的方法了!
首先,由于可以反复经过一条边,因此我们可以把一条合法的路径看成这样的结构:
从$1$到$n$有一条链,这条链上挂着一些环,答案是链的贡献异或环的贡献(因为从链到环的边一定会被经过两次,因此不产生贡献)
那么我们只需最大化这个东西就可以了
进一步分析,从$1$到$n$会有很多条链,选哪条呢?
随便选!
因为我们看到,可以从一条链换成另一条链的条件是这两条链各有一部分在同一个环里!
而一条链的一部分异或大环的贡献就相当于切换到了另一条链上,因此我们只需把所有环的贡献扔到一个线性基里,然后找出一条从1到n的路径在这个线性基里查最大贡献即可
贴代码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#define ll long long
using namespace std;
struct Edge
{
int nxt,to;
ll val;
}edge[200005];
int head[50005];
bool vis[50005];
ll v[50005];
ll p[65];
int n,m;
int cnt=1;
void add(int l,int r,ll w)
{
edge[cnt].nxt=head[l];
edge[cnt].to=r;
edge[cnt].val=w;
head[l]=cnt++;
}
void ins(ll x)
{
for(int i=63;i>=0;i--)
{
if(!((1ll<<i)&x))continue;
else if(p[i])x^=p[i];
else {p[i]=x;break;}
}
}
ll query(ll x)
{
ll ret=x;
for(int i=63;i>=0;i--)if((ret^p[i])>ret)ret^=p[i];
return ret;
}
void dfs(int x,ll dis)
{
v[x]=dis,vis[x]=1;
for(int i=head[x];i;i=edge[i].nxt)
{
int to=edge[i].to;
if(vis[to])ins(dis^edge[i].val^v[to]);
else dfs(to,dis^edge[i].val);
}
}
template <typename T>inline void read(T &x)
{
T f=1,c=0;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();}
x=c*f;
}
int main()
{
read(n),read(m);
for(int i=1;i<=m;i++)
{
int x,y;ll z;
read(x),read(y),read(z);
add(x,y,z),add(y,x,z);
}
dfs(1,0);
printf("%lld\n",query(v[n]));
return 0;
}
bzoj 2115的更多相关文章
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- bzoj 2115 Xor - 线性基 - 贪心
题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 问点$1$到点$n$的最大异或路径. 因为重复走一条边后,它的贡献会被消去.所以这条路径中有贡献的边可以看成是一条$1$到 ...
- BZOJ 2115 Xor(抑或值最大路径)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2115 题意:给出一个带权无向图.求一条1到n的路径使得路径上权值的抑或值最大? 思路:( ...
- bzoj 2115: [Wc2011] Xor xor高斯消元
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 797 Solved: 375[Submit][Status] ...
- BZOJ 2115: [Wc2011] Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2794 Solved: 1184 [Submit][Stat ...
- BZOJ 2115: [Wc2011] Xor 线性基 dfs
https://www.lydsy.com/JudgeOnline/problem.php?id=2115 每一条从1到n的道路都可以表示为一条从1到n的道路异或若干个环的异或值. 那么把全部的环丢到 ...
- [bzoj 2115]线性基+图论
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 给定一个带权无向图,要找出从1到n路径权值异或和最大的那一条的路径异或和. 考虑1到 ...
- [BZOJ 2115] Xor
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 Algorithm: 此题一看到是求异或和最大问题的,立即想到使用线性基解题 最终 ...
- bzoj 2115 [Wc2011] Xor——路径和环的转化
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 思路很精妙.好像能应用到很多地方. 发现如果路径上有环,可以通过一些走法达到 异或了那 ...
- ACM学习历程—BZOJ 2115 Xor(dfs && 独立回路 && xor高斯消元)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 题目大意是求一条从1到n的路径,使得路径xor和最大. 可以发现想枚举1到n的所有路 ...
随机推荐
- java中线程的两种创建方式
第一种:继承java.lang.Thread类.然后重写run方法 例如我们模拟一个龟兔赛跑 1 package edu.aeon.thread; 2 3 /** 4 * 说明:模拟龟兔赛跑 5 * ...
- uni-app学习笔记之----getCurrentPages()的使用
1.判断是否是首页 如果得到数组元素只有一个,说明是首页 2.得到页面中的信息 得到数组中的第一个元素代表首页,最后一个元素代表当前页
- 无锁并发,CAS等
Unsafe
- PostgreSQL-14 安装配置-wsl_v1_ubuntu22.04
环境准备 pgAdmin: Cisco2022 postgrep数据库: postgres: Postgres_2023 install https://learn.microsoft.com/en- ...
- JAVA学习笔记-10
String类: 字符串是一个特殊的对象.字符串最大的特点:一旦被初始化就不可以被改变. String类适用于描述字符串事物.那么它就提供了多个方法对字符串进行操作. 常见的操作: 1.获取: int ...
- pytest学习总结
官方pytest文档:Full pytest documentation - pytest documentation 一.pytest以及辅助插件的安装 1.pytest安装 pip install ...
- Winform帮助文档(C#打开chm定位到特定页面)国内最全总结写法。原文文档带翻译
下面比较啰嗦,只一句即可:Help.ShowHelp(null,"C:\help.hcm", HelpNavigator.Topic,"index.htm")方 ...
- NSQ(6)-nsq相关策略
1:nsq的流量控制 RDY 消息中间件的实现无非两种套路,一种让客户端pull,典型的比如kafka便是如此,而另一种则是push,也就是让客户端不需要做任何操作,只需要做好conn便可以源源不断收 ...
- p标签设置行数,超出部分用省略号隐藏
p { overflow: hidden; text-overflow: ellipsis; -webkit-line-clamp: 2; word-wrap: break-word; display ...
- django日志分割的几种处理
https://blog.csdn.net/qq_42819407/article/details/125041634