线性基好题

首先,如果一条路径被经过了两次,那么这条路径上的权值等于没有(废话)

基于这一点,我们其实已经找到了解决问题的方法了!

首先,由于可以反复经过一条边,因此我们可以把一条合法的路径看成这样的结构:

从$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的更多相关文章

  1. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  2. bzoj 2115 Xor - 线性基 - 贪心

    题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 问点$1$到点$n$的最大异或路径. 因为重复走一条边后,它的贡献会被消去.所以这条路径中有贡献的边可以看成是一条$1$到 ...

  3. BZOJ 2115 Xor(抑或值最大路径)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2115 题意:给出一个带权无向图.求一条1到n的路径使得路径上权值的抑或值最大? 思路:( ...

  4. bzoj 2115: [Wc2011] Xor xor高斯消元

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 797  Solved: 375[Submit][Status] ...

  5. BZOJ 2115: [Wc2011] Xor

    2115: [Wc2011] Xor Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 2794  Solved: 1184 [Submit][Stat ...

  6. BZOJ 2115: [Wc2011] Xor 线性基 dfs

    https://www.lydsy.com/JudgeOnline/problem.php?id=2115 每一条从1到n的道路都可以表示为一条从1到n的道路异或若干个环的异或值. 那么把全部的环丢到 ...

  7. [bzoj 2115]线性基+图论

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 给定一个带权无向图,要找出从1到n路径权值异或和最大的那一条的路径异或和. 考虑1到 ...

  8. [BZOJ 2115] Xor

    Link:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 Algorithm: 此题一看到是求异或和最大问题的,立即想到使用线性基解题 最终 ...

  9. bzoj 2115 [Wc2011] Xor——路径和环的转化

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 思路很精妙.好像能应用到很多地方. 发现如果路径上有环,可以通过一些走法达到 异或了那 ...

  10. ACM学习历程—BZOJ 2115 Xor(dfs && 独立回路 && xor高斯消元)

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115 题目大意是求一条从1到n的路径,使得路径xor和最大. 可以发现想枚举1到n的所有路 ...

随机推荐

  1. (0321) 路科 视频 ,讲 uvm_pkg

    loading

  2. Camstar获取回参

    public static bool SplitQty(string Username, string Password, string Container, int splitQty,int pla ...

  3. JS脱敏姓名、身份证、电话、邮箱

    一.姓名脱敏 handleName(name) { let arr = Array.from(name) let result = '' if (arr.length === 2) { result ...

  4. Day24:结论的撰写&&openid再次尝试

    今日完成的任务: 1.完成部分总报告结论的撰写. 2.再次尝试获取openid 根据官方文档,wx.login()的回调函数中,需要我们传递生成的用户登录凭证到code2accessToken的接口中 ...

  5. javascript获取浏览器窗口分辨率|浏览器全屏分辨率|屏幕分辨率

    浏览器窗口分辨率指显示网页的区域,在PC端由于浏览器窗口大小可调节,这个值是可变的.在手机等移动端浏览器窗口大小不可调节,宽度值是固定的,但竖屏和横屏切换会改变. 浏览器全屏分辨率是指浏览器启用全屏显 ...

  6. 实验1task2

    <实验结论> #include <stdio.h> #include <stdlib.h> int main() { int n,sum; scanf(" ...

  7. [Oracle19C ASM管理] ASM的存储管理

    安装过程中,选择的OMF自动管理文件.可以看到存储放在ASM的根下. SQL> show parameter db_create_file_dest; NAME TYPE VALUE db_cr ...

  8. CAD中相交线怎样打断?CAD打断相交线步骤

    在CAD设计过程中,如果想要打断图纸中相交线该如何操作呢?大家第一个想到的是不是CAD打断命令?没错,CAD打断命令是可以实现的,但是过于麻烦,今天小编来给大家分享一个更简单的方法,那就是浩辰CAD软 ...

  9. [原创] CSS自定义IOS苹果,Android安卓的CheckBox 效果,可以根据文字大小变化而变化,内框显示文字,另外可自定大小,自定颜色

    在经过对网上一些自定CheckBox的一番研究之后,现在综合讲一下该样式实现的技巧. 先上图: 图中已展示了多种样式,实现的原理很简单,一个外Box,一个内Box,外Box显示背景色,内Box显示白色 ...

  10. 解决QtCreator运行程序报plugin xcb的错误

    解决方法:将对应项目的运行环境的LD_LIBRARY_PATH中的qt的库路径移到最前面,如下图: LD_LIBRARY_PATH可以指定查找共享库的路径,将qt的共享库移到前面,可以优先使用qt的库