题目大意:

给你一张n个点,m条边的无向图,每条边都有一个权值,求:1到n的路径权值和的最大值。

题解:

任意一条路径都能够由一条简单路径(任意一条),在接上若干个环构成(如果不与这条简单路径相连就走过去再走回来)。

那么在对这些环进行分类:

1、直接与简单路径相连

相交的重复部分不算就可以了。

2、不与简单路径相连

我们需要跑过去,再跑回来对吧,这样的话,不管我们是怎么跑的,非环的路径对答案的贡献始终为0,(抵消了嘛)。

这样的话,我们只需要用这几个环来构造线性基即可,最后再找个最大值就行啦!

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=50005,M=200005;
ll b[65],dist[M],d[N],z,ans;
int head[N],vet[M],nxt[M],n,m,x,y,tot;
bool vis[N],used[M];
void add(int x,int y,ll z){
nxt[++tot]=head[x];
vet[tot]=y;
head[x]=tot;
dist[tot]=z;
}
void insert(ll x){
for (int i=63;i>=0;i--)
if (x>>i)
if (b[i]) x^=b[i];
else {b[i]=x; break;}
}
void dfs(int u){ //找环
vis[u]=true;
for (int i=head[u];i;i=nxt[i]){
int v=vet[i];
if (!vis[v]){
d[v]=d[u]^dist[i];
dfs(v);
} else
if (!used[i^1]){
used[i^1]=true;
insert(d[u]^d[v]^dist[i]);
}
}
}
int main(){
scanf("%d %d",&n,&m); tot=1;
for (int i=1;i<=m;i++){
scanf("%d %d %lld",&x,&y,&z);
add(x,y,z); add(y,x,z);
}
dfs(1);
ans=d[n];
for (int i=63;i>=0;i--)
if ((ans^b[i])>ans) ans=ans^b[i];
printf("%lld\n",ans);
return 0;
}

[WC 2011]最大Xor和路径的更多相关文章

  1. 【BZOJ 2115】【WC 2011】Xor

    计算1到n的一条路径使得路径上的值xor和最大. 先任意走一条路径计算xor和,然后dfs的时候处理出所有的环的xor和,这样对于所有的环的xor和求线性基,在任意走出的路径的xor和上贪心即可. 正 ...

  2. 【概率DP/高斯消元】BZOJ 2337:[HNOI2011]XOR和路径

    2337: [HNOI2011]XOR和路径 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 682  Solved: 384[Submit][Stat ...

  3. BZOJ2337: [HNOI2011]XOR和路径

    题解: 异或操作是每一位独立的,所以我们可以考虑每一位分开做. 假设当前正在处理第k位 那令f[i]表示从i到n 为1的概率.因为不是有向无环图(绿豆蛙的归宿),所以我们要用到高斯消元. 若有边i-& ...

  4. BZOJ 2337: [HNOI2011]XOR和路径( 高斯消元 )

    一位一位考虑异或结果, f(x)表示x->n异或值为1的概率, 列出式子然后高斯消元就行了 --------------------------------------------------- ...

  5. BZOJ 2337: [HNOI2011]XOR和路径 [高斯消元 概率DP]

    2337: [HNOI2011]XOR和路径 题意:一个边权无向连通图,每次等概率走向相连的点,求1到n的边权期望异或和 这道题和之前做过的高斯消元解方程组DP的题目不一样的是要求期望异或和,期望之间 ...

  6. 【BZOJ2337】Xor和路径(高斯消元)

    [BZOJ2337]Xor和路径(高斯消元) 题面 BZOJ 题解 我应该多学点套路: 对于xor之类的位运算,要想到每一位拆开算贡献 所以,对于每一位拆开来看 好了,既然是按位来算 我们就只需要计算 ...

  7. [HNOI2011]XOR和路径 && [HNOI2013]游走

    [HNOI2011]XOR和路径 题目大意 具体题目:戳我 题目: 给定一个n个点,m条边的有重边.有自环的无向图,其中每个边都有一个边权. 现在随机选择一条1到n的路径,路径权值为这条路径上所有边权 ...

  8. 洛谷 P4151 [WC2011]最大XOR和路径 解题报告

    P4151 [WC2011]最大XOR和路径 题意 求无向带权图的最大异或路径 范围 思路还是很厉害的,上午想了好一会儿都不知道怎么做 先随便求出一颗生成树,然后每条返祖边都可以出现一个环,从的路径上 ...

  9. [WC2011]最大XOR和路径 线性基

    [WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部 ...

随机推荐

  1. 解决winserver2012R2安装VMware15(pro)问题

    问题:之前就遇到过,一台WIN2012R2装不了vmwareworkstation15的问题.这次又安装了一台WindowsServer2012R2Datacenter:依然发现安装不了,于是开始上网 ...

  2. Spring JPA 拓展

    Spring JPA 拓展 翻译:Spring Data Extensions 本节记录了一组Spring数据扩展,它们支持在各种上下文中使用Spring数据.目前,大部分集成都是针对Spring M ...

  3. 如何让Web程序在点击按钮后出现如执行批处理程序般的效果

    在cli程序中,输入命令得到连续的输出已经是一种进度而美观的页面交互形式,好比下图: 而web程序里也有类似的场景,比如执行一个耗时任务,除了显示出等待图标外,用户还希望把执行的状态及时显示出来.如下 ...

  4. 干Java这一行,应该怎样提升自己?

    前段时间,字节跳动在阿里巴巴的大本营杭州悄悄的建立一个研发中心,最近在疯狂招人. 相信最近一段时间,杭州的很多的互联网公司的开发人员都接到过猎头的电话.据了解,字节跳动杭州研发中心主要负责字节跳动新增 ...

  5. leetcode刷题-71简化路径

    题目 以 Unix 风格给出一个文件的绝对路径,你需要简化它.或者换句话说,将其转换为规范路径. 在 Unix 风格的文件系统中,一个点(.)表示当前目录本身:此外,两个点 (..) 表示将目录切换到 ...

  6. centos7图形化安装oracle11g

    #设置主机名 hostnamectl set-hostname oracle #yum安装 yum -y install unzip vim* bash-completion bash-complet ...

  7. 关于“枚举{0,1,...,n-1}所包含的所有大小为k的子集”的理解

    前言 今天整理以前的竞赛笔记时,发现了当时写的一个模板: 枚举{0,1,-,n-1}所包含的所有大小为k的子集: int comb = (1 << k) - 1; while (comb ...

  8. docker中重启某个服务命令

    docker ps------查看正在运行的cotainners docker ps -a --------查看所有的containners docker restart 容器id docker lo ...

  9. Linux自动同步时间的方法

    介绍两种同步linux系统的时间方法: (1) 开启ntpd服务,即配置ntp服务器实现时间同步. (2) 利用ntp客户端程序,即ntpdate同步时间. 注意:因为ntp服务器本来就会与上层时间服 ...

  10. k8s volume存储卷

    k8s volume存储卷   介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价, ...