P4151 [WC2011]最大XOR和路径
P4151 [WC2011]最大XOR和路径
一道妙极了的题。
首先直接从1走到n
然后现在图上有很多环
所以可以在走到n之后走到环上一个点,再走一遍环,再原路返回。这样就会xor上环的权值。
然后只需要把环搜出来就星了。
// It is made by XZZ
#include<cstdio>
#include<algorithm>
#define il inline
#define rg register
#define vd void
#define sta static
typedef long long ll;
il ll gi(){
    rg ll x=0;rg char ch=getchar();
    while(ch<'0'||ch>'9')ch=getchar();
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x;
}
const int maxn=50000+10,maxm=100010<<1;
int n,m,fir[maxn],dis[maxm],nxt[maxm],id;ll w[maxm];
il vd link(int x,int y,ll z){nxt[++id]=fir[x],fir[x]=id,dis[id]=y,w[id]=z;}
ll p[64],dist[maxn];
il vd insert(ll x){
    for(rg int i=63;~i;--i)
        if((x>>i)&1){
            if(!p[i]){p[i]=x;break;}
            else x=x xor p[i];
        }
}
il vd dfs(int x,ll d){
    dist[x]=d;
    for(rg int i=fir[x];i;i=nxt[i])
        if(~dist[dis[i]])insert(d xor dist[dis[i]] xor w[i]);
        else dfs(dis[i],d xor w[i]);
}
int main(){
#ifdef xzz
    freopen("4151.in","r",stdin);
    freopen("4151.out","w",stdout);
#endif
    n=gi(),m=gi();ll x,y,z;
    while(m--)x=gi(),y=gi(),z=gi(),link(x,y,z),link(y,x,z);
    for(rg int i=1;i<=n;++i)dist[i]=-1;
    dfs(1,0);
    ll ans=dist[n];
    for(rg int i=63;~i;--i)ans=std::max(ans,ans xor p[i]);
    printf("%lld\n",ans);
    return 0;
}
												
											P4151 [WC2011]最大XOR和路径的更多相关文章
- 洛谷 P4151 [WC2011]最大XOR和路径 解题报告
		
P4151 [WC2011]最大XOR和路径 题意 求无向带权图的最大异或路径 范围 思路还是很厉害的,上午想了好一会儿都不知道怎么做 先随便求出一颗生成树,然后每条返祖边都可以出现一个环,从的路径上 ...
 - 洛谷P4151 [WC2011] 最大XOR和路径 [线性基,DFS]
		
题目传送门 最大XOR和路径 格式难调,题面就不放了. 分析: 一道需要深刻理解线性基的题目. 好久没打过线性基的题了,一开始看到这题还是有点蒙逼的,想了几种方法全被否定了.还是看了大佬的题解才会做的 ...
 - 【线性基/神仙题】P4151 [WC2011]最大XOR和路径
		
Description 给定一个无向连通图,边有边权,求一个 \(1~\sim n\) 的路径,最大化边权的异或和.如果一条边经过多次则计算多次. Input 第一行是两个整数 \(n,m\) 代表点 ...
 - [洛谷P4151][WC2011]最大XOR和路径
		
题目大意:给你一张$n$个点$m$条边的无向图,求一条$1->n$的路径,使得经过路径值的异或值最大(重复经过重复计算) 题解:某条路$k$被重复走了两次,那么它的权值对答案的贡献就是$0$,但 ...
 - 洛谷P4151 [WC2011]最大XOR和路径(线性基)
		
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 首先看到异或就想到线性基 我们考虑有一条路径,那么从这条路径走到图中的任意一个环再走回这条路径上,对答案的贡献是这个环的异或和,走到这个环上的路径对 ...
 - P4151 [WC2011]最大XOR和路径    线性基
		
题目传送门 题意:给出一幅无向图,求1到n的所有路径中最大异或和,一条边可以被重复经过. 思路: 参考了大佬的博客 #pragma GCC optimize (2) #pragma G++ optim ...
 - [WC2011]最大XOR和路径(线性基)
		
P4151 [WC2011]最大XOR和路径 题目描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如下( 1 表示真, 0 表 ...
 - [WC2011]最大XOR和路径 线性基
		
[WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部 ...
 - 题解-[WC2011]最大XOR和路径
		
[WC2011]最大XOR和路径 给一个 \(n\) 个点 \(m\) 条边(权值为 \(d_i\))的无向有权图,可能有重边和子环.可以多次经过一条边,求 \(1\to n\) 的路径的最大边权异或 ...
 
随机推荐
- Celery学习---Celery 与django结合实现计划任务功能
			
项目的目录结构: 项目前提: 安装并启动Redis 安装Django和Celery的定时任务插件 安装方法一: pip直接安装[安装了pip的前提下] omc@omc-virtual-machine: ...
 - 华为18.9.5校招笔试题AK
			
26进制加法(一) 'a'-'z'代表十进制的0-25,求26进制加法.例如 'z'+'bc'= 'cb' 博主思路: 首先将长度不同的字符串高位补'a' 从低位开始将字符转换为10进制相加 计算进位 ...
 - java内部类案例
			
实现键值对的存储输出 import java.util.Arrays; public class EntryDemoTest { //实现键值对的存储 public static void main( ...
 - JVM 调优参数详解
			
GC有两种类型:Scavenge GC 和Full GC 1.Scavenge GC 一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,堆的Eden区域进行GC, ...
 - 学习python第三天之多行函数
			
多行函数:(聚合函数/分组函数) 解释:多条数据进入,单条结果出来(多进单出) 1).max(obj):最大值 2).min(obj):最小值 3).sum(num):求和 4).avg(num):求 ...
 - TensorFlow函数(八)tf.control_dependencies()
			
tf.control_dependencies(control_inputs) 此函数指定某些操作执行的依赖关系 返回一个控制依赖的上下文管理器,使用 with 关键字可以让在这个上下文环境中的操作都 ...
 - 范数 L1 L2
			
在线性代数,函数分析等数学分支中,范数(Norm)是一个函数,是赋予某个向量空间(或矩阵)中的每个向量以长度或大小的函数.对于零向量,令其长度为零.直观的说,向量或矩阵的范数越大,则我们可以说这个向量 ...
 - 为什么会有object这么一个根基类
			
先问一个问题,为什么需要有一个统一的基类:Object?甚至,我们在编程语言中也常常见到这种模式,比如Java中的object.C#的object,甚至一些纯对象的脚本语言(Ruby里连数字123都是 ...
 - mongodb启动与运用
			
在操作前需要启动mongodb数据库服务 1.首先打开dos窗口,然后选择路径到你的安装路径下的bin目录(我的路径是的D:mongo\mongodb\bin) 2.然后输入启动命令(D:mongo\ ...
 - web常用的正则表达式
			
1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用: 2. "^\d+$" //非负整数(正整数 + 0) 3. "^[0 ...