【WC2011】bzoj2115 Xor

2023-11-07 20:08
文章标签 xor wc2011 bzoj2115

本文主要是介绍【WC2011】bzoj2115 Xor,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Description

Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目。 接下来M 行描述 M 条边,每行三个整数Si,Ti
,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边。 图中可能有重边或自环。 Output
仅包含一个整数,表示最大的XOR和(十进制结果),注意输出后加换行回车。

因为一条路异或两次就没有了,所以任何一条路径的异或和,都可以看成是某条起点到终点的路径和若干个简单环异或的结果。
dfs一遍找出所有简单环和任意一条路径,对简单环权值求线性基再贪心选取。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
int fir[50010],ne[200010],to[200010],n,m,tot,num;
bool vv[50010],ve[100010];
LL w[200010],f[50010],a[100010];
void add(int num,int u,int v,LL x)
{ne[num]=fir[u];fir[u]=num;to[num]=v;w[num]=x;
}
void init()
{int i,u,v;LL x;scanf("%d%d",&n,&m);for (i=1;i<=m;i++){scanf("%d%d%lld",&u,&v,&x);add(i*2,u,v,x);add(i*2+1,v,u,x);}
}
void dfs(int u)
{int i,v;for (i=fir[u];i;i=ne[i])if (!vv[v=to[i]]){vv[v]=ve[i/2]=1;f[v]=f[u]^w[i];dfs(v);}
}
void find()
{int i,j;for (i=1;i<=n;i++)for (j=fir[i];j;j=ne[j])if (!ve[j/2]){ve[j/2]=1;a[tot++]=f[i]^f[to[j]]^w[j];}
}
void solve()
{int i,p,j;LL ans;for (i=62,num=0;i>=0;i--){p=-1;for (j=num;j<tot;j++)if (a[j]&(1LL<<i)){p=j;break;}if (p==-1) continue;if (p>num) swap(a[p],a[num]);for (j=0;j<tot;j++)if (j!=num&&(a[j]&(1LL<<i)))a[j]^=a[num];num++;}ans=f[n];for (i=0;i<num;i++)if ((ans^a[i])>ans)ans^=a[i];printf("%lld\n",ans);
}
int main()
{init();vv[1]=1;dfs(1);find();solve();
}

这篇关于【WC2011】bzoj2115 Xor的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365984

相关文章

ABC367G-Sum of (XOR^K or 0)

第一次学会多项式的题目。 题意: n n n个数的多重集 S S S,设 S ′ ⊆ S , f ( A ) = [ ∣ A ∣ = t m , t ∈ Z ] ( X O R a i ∈ a a i ) k S' \subseteq S,f(A)=[|A| =tm,t\in Z](XOR_{a_i\in a}ai)^k S′⊆S,f(A)=[∣A∣=tm,t∈Z](XORai​∈a​ai)k

E - Xor Distances

树和 xor 有些地方 很契合🔥。。 比如树上距离。。很容易想到减去lca公共的那段。 而xor 他异或 刚好也是会抵消公共部分的。。。 题目链接 #include <bits/stdc++.h>using namespace std;#define int long long#define ll __int128_t#define ar array<int, 2>#define a

buuctf [MRCTF2020]Xor

前言:学习笔记。 32位IDA 打开。 先查找字符串 ok,反汇编不了,好吧,只能看汇编代码。 那咱用OD去做。顺便复习汇编语言 接着往下。 没看懂?那把JNZ SHORT xor.00CE10FF 给NOP掉再看看。 再走一遍。 猜测AL是否代表的是下标? CL是对应值?不确定,再走一遍。 OK,结案,程序是对应值与对应下

[POJ 3764] The xor-longest Path (Tire树 + 贪心)

POJ - 3674 题意是给你一个树,每条边有一个权值,求得树上一条路径,使路径上每条边权值的异或和最大 首先用一个 DFS把根到任意点的路径的异或和求出来 xorv[i] 由异或的性质可得点 u和点 v的异或和即为 xorv[u]^xorv[v] ( 根到两点 LCA的异或和会消去) 然后问题就转化成在区间内找两个值,使得他们的异或和最大 与 LightOJ - 1269一样的做法,

To xor or not to xor 高斯消元求异或

【题目】 给你n个long long范围内的整数,你可以选取1个或多个数进行异或操作,使得结果最大,求最大的结果。 【题目分析】 真是一道好题,不是真正理解高斯消元是无法做这题的。 题意:给你n个数,可以选择任意个数异或,但是要使得最后的异或值最大。 我们把每个数用二进制表示,要使得最后的异或值最大,就是要让高位尽量为1,高位能不能为1就必须用高斯消元判断了。 1. 根据数的二进制表示,建立

C# OpenCvSharp 逻辑运算-bitwise_and、bitwise_or、bitwise_not、bitwise_xor

bitwise_and 函数 🤝 作用或原理: 将两幅图像进行与运算,通过逻辑与运算可以单独提取图像中的某些感兴趣区域。如果有掩码参数,则只计算掩码覆盖的图像区域。 示例: 在实际应用中,可以用 bitwise_and 来提取图像中的某些部分。例如,我们可以从图像中提取出一个特定的颜色范围(如红色)。 using OpenCvSharp;class Program{static void

Intel8086处理器使用NASM汇编语言实现操作系统07-以除法和BCD码两种方式显示10进制和16进制数字到屏幕/div/xor

div除法指令,这是我最烦的汇编指令之一了,它的写法在不同位数CPU上都是不一样的 div bh ;表示用AX里的值除以bh寄存器中的值;因为div后面接8位寄存器或者内存地址,商在AL寄存器中,余数在AH寄存器中div bx ;表示用高16位在DX,低16位在AX里的值,除以bx寄存器中的值;因为div后面接16位寄存器或者内存地址,商在AX寄存器中,余数在DX寄存器中div ebx

Golang-编码加密-Xor(GG)

go语言环境搭建 Golang学习日志 ━━ 下载及安装_golang下载-CSDN博客    go run xxx.go   go build xxx.go  首先,cs.msf生成比特流数据.  放入xor,py脚本中进行xor加密.  xor.py def xor(shellcode, key):new_shellcode = ""key_len

hdu 5269 ZYB loves Xor I

题目: ZYB喜欢研究Xor,现在他得到了一个长度为n的数组A。于是他想知道:对于所有数对(i,j)(i∈[1,n],j∈[1,n]),lowbit(AixorAj)之和为多少.由于答案可能过大,你需要输出答案对998244353取模后的值定义lowbit(x)=2k,其中k是最小的满足(x and 2k)>0的数特别地:lowbit(0)=0 输入: 一共T(T≤10)组数

HDU 3949 XOR(高斯消元搞基)

HDU 3949 XOR 题目链接 题意:给定一些数字,问任取几个异或值第k大的 思路:高斯消元搞基,然后从低位外高位去推算 代码: #include <cstdio>#include <cstring>#include <algorithm>using namespace std;typedef long long ll;const int N = 10005;