博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj2115【WC2001】Xor
阅读量:6792 次
发布时间:2019-06-26

本文共 1712 字,大约阅读时间需要 5 分钟。

2115: [Wc2011] Xor

Time Limit: 10 Sec  
Memory Limit: 259 MB
Submit: 2059  
Solved: 856
[ ][ ][ ]

Description

Input

第一行包括两个整数N和 M, 表示该无向图中点的数目与边的数目。

接下来M 行描写叙述 M 条边,每行三个整数Si。Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边。 图中可能有重边或自环。

Output

仅包括一个整数,表示最大的XOR和(十进制结果),注意输出后加换行回车。

Sample Input

5 7
1 2 2
1 3 2
2 4 1
2 5 1
4 5 3
5 3 4
4 3 2

Sample Output

6

HINT

贪心+线性基(什么是线性基...我仅仅知道宋仲基2333)

有一个性质,一个数被异或两次就等于0。所以一条边在路径中出现偶数次就会被抵消。那么我们就能够随便找一条1到n的路径,然后把它异或一些简单环,就能够得到其它路径。

如今我们要找出无向图中的全部简单环,DFS的过程中加一些推断就能够了。

于是问题就变成从一个数组中找几个数。让他们和还有一个数的异或和最大。方法是对于这个数组求线性基。然后在线性基里倒着贪心。(详见代码)

#include
#include
#include
#include
#include
#include
#define F(i,j,n) for(int i=j;i<=n;i++)#define D(i,j,n) for(int i=j;i>=n;i--)#define ll long long#define maxn 50005#define maxm 200005using namespace std;int n,m,cnt,tot,head[maxn];ll ans,d[maxn],a[maxm],b[100];bool vst[maxn];struct edge_type{int next,to;ll w;}e[maxm];inline ll read(){ ll x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}inline void add_edge(int x,int y,ll w){ e[++cnt]=(edge_type){head[x],y,w};head[x]=cnt; e[++cnt]=(edge_type){head[y],x,w};head[y]=cnt;}inline void dfs(int x){ vst[x]=true; for(int i=head[x];i;i=e[i].next) { int y=e[i].to; if (!vst[y]) { d[y]=d[x]^e[i].w; dfs(y); } else a[++tot]=d[x]^d[y]^e[i].w; }}int main(){ n=read();m=read(); F(i,1,m) { int x=read(),y=read();ll z=read(); add_edge(x,y,z); } dfs(1); ans=d[n]; F(i,1,tot) D(j,63,0) if ((a[i]>>j)&1) { if (!b[j]){b[j]=a[i];break;} else a[i]^=b[j]; } D(i,63,0) if (b[i]&&((ans>>i)&1)==0) ans^=b[i]; printf("%lld\n",ans); return 0;}

转载地址:http://jkogo.baihongyu.com/

你可能感兴趣的文章
Linux服务器网络连接有问题?Ping工具来帮忙
查看>>
Facebook新功能:自动识别哪些李鬼账号假冒您
查看>>
研发人员开发出一套硬件级别的后门技术
查看>>
电力“十三五” 光伏分布式6000万千瓦迎来机遇
查看>>
高桥洋接任索尼中国总裁:索尼营销第一人
查看>>
知乎iOS客户端下午瘫了 原来是第三方防火墙变更害的
查看>>
监控工程中,如何选择光纤的种类和芯数
查看>>
“小病进社区,大病进医院”难吗?
查看>>
20种 IT 职业明年将大幅涨薪,无线网络工程师最高
查看>>
《C语言编程——零基础初学者指南(第3版)》一第2章 编写第一个C程序2.1 概述...
查看>>
《HTML5+CSS3网页设计入门必读》——1.3 理解Web内容递送
查看>>
oracle table-lock的5种模式
查看>>
《 线性代数及其应用 (原书第4版)》——2.8 R^n的子空间
查看>>
初创公司如何快速低耗实现数据化运营
查看>>
《循序渐进学Docker》——导读
查看>>
《树莓派开发实战(第2版)》——1.8 使用复合视频显示器/TV
查看>>
编码之道:取个好名字很重要
查看>>
《树莓派开发实战(第2版)》——1.5 通过NOOBS刷写microSD卡
查看>>
《Python Cookbook(第3版)中文版》——1.7 让字典保持有序
查看>>
在 Linux 中设置 sudo 的十条 sudoers 实用配置
查看>>