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的所有路 ...
随机推荐
- Python学习笔记(六)循环
一.while循环 1.while在给定的判断条件为True时执行循环体,否则退出循环体 1 flag = True 2 while flag: 3 print('正确') 4 flag = Fals ...
- echarts柱状图快速上手笔记地址
https://blog.csdn.net/qq_40323256/article/details/114890628 借鉴借鉴
- thirty-one
动态组件 动态切换组件的显示和隐藏 如何实现动态组件的渲染 vue提供了有一个内置的<component>组件,专门用来实现动态组件的渲染.示例代码如下: 使用keep-alive保持状态 ...
- everything 基本功能是本地搜索 高级功能 可以建立 HTTP服务器
局域网,可以查看,播放,等操作
- laravel常用集合的使用
创建集合: //数组1 $connection = collect([ ['name'=>'jack','age'=>'18','email'=>'ceshi@qq.com'], [ ...
- nginx配置根据url的参数值进行转发
server { listen 8081; location / { set $tag ""; set $cs "/index/test/test"; prox ...
- 查询dockerhub中某镜像所有版本
curl https://registry.hub.docker.com/v1/repositories/${imagename}/tags | tr -d '[[]" ]' | tr '} ...
- cuda 11.8
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_a ...
- b站
题目描述 n条鱼,每条鱼的体积是ai 每一轮,每一条鱼一定会吃掉右边比自己小的第一条鱼,一条鱼只能被吃一次. 多少轮后,鱼的数量会稳定. 例子: 6 6 3 3 --> 6 6 3(第二个3)- ...
- Java实现发红包模拟
1.先画界面 package com.cmk; import javax.swing.*; import java.awt.*; import java.awt.event.KeyAdapter; i ...