【线性基】【贪心】【独立环】bzoj2115 [Wc2011] Xor
网上到处都是题解,自己画个图也很好理解。虽然环的个数很多,但是都可以通过独立环之间异或出来,不用管。
独立环求法:生成树之后,每次向图里添加非树边(u,v),则这个独立环的异或和为sum[u]^sum[v]^w(u,v)。sum[u]为从1到u的任意一条路径的异或和。
#include<cstdio>
using namespace std;
#define N 50001
#define M 100001
typedef long long ll;
ll w[M<<1],sum[N],a[M],base[64],zs[M];
int n,m,v[M<<1],first[N],en,next[M<<1],xs[M],ys[M];
bool vis[N],used[M];
int e2;
void AddEdge(int U,int V,ll W)
{
v[++en]=V;
w[en]=W;
next[en]=first[U];
first[U]=en;
}
void dfs(int U)
{
vis[U]=1;
for(int i=first[U];i;i=next[i])
if(!vis[v[i]])
{
sum[v[i]]=(sum[U]^w[i]);
dfs(v[i]);
}
}
int fa[N],rank[N];
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
void Union(int U,int V)
{
if(rank[U]<rank[V]) fa[U]=V;
else
{
fa[V]=U;
if(rank[U]==rank[V])
++rank[U];
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i)
{
scanf("%d%d%lld",&xs[i],&ys[i],&zs[i]);
AddEdge(xs[i],ys[i],zs[i]);
AddEdge(ys[i],xs[i],zs[i]);
}
dfs(1);
for(int i=1;i<=n;++i) fa[i]=i;
int cnt=0;
for(int i=1;i<=m;++i)
{
int f1=find(xs[i]),f2=find(ys[i]);
if(f1!=f2)
{
++cnt;
used[i]=1;
Union(f1,f2);
if(cnt==n-1)
break;
}
}
for(int i=1;i<=m;++i)
if(!used[i])
a[++e2]=(sum[xs[i]]^sum[ys[i]]^zs[i]);
for(int i=1;i<=e2;++i)
for(int j=63;j>=0;--j)
if((a[i]>>j)&1)
{
if(!base[j])
{
base[j]=a[i];
break;
}
a[i]^=base[j];
}
for(int i=63;i>=0;--i)
if((sum[n]^base[i])>sum[n])
sum[n]^=base[i];
printf("%lld\n",sum[n]);
return 0;
}
【线性基】【贪心】【独立环】bzoj2115 [Wc2011] Xor的更多相关文章
- BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)
题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...
- BZOJ2115 [Wc2011] Xor 【线性基】
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 3915 Solved: 1633 [Submit][Stat ...
- BZOJ2115:[WC2011] Xor(线性基)
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
- bzoj2115 [Wc2011] Xor——高斯消元 & 异或线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 异或两次同一段路径的权值,就相当于没有走这段路径: 由此可以得到启发,对于不同的走法, ...
- bzoj 2115 Xor - 线性基 - 贪心
题目传送门 这是个通往vjudge的虫洞 这是个通往bzoj的虫洞 题目大意 问点$1$到点$n$的最大异或路径. 因为重复走一条边后,它的贡献会被消去.所以这条路径中有贡献的边可以看成是一条$1$到 ...
- 【线性基/神仙题】P4151 [WC2011]最大XOR和路径
Description 给定一个无向连通图,边有边权,求一个 \(1~\sim n\) 的路径,最大化边权的异或和.如果一条边经过多次则计算多次. Input 第一行是两个整数 \(n,m\) 代表点 ...
- BZOJ 4269: 再见Xor 线性基+贪心
Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行一个正整数N. 接下来一行N个非负整数. ...
- 【BZOJ-2460&3105】元素&新Nim游戏 动态维护线性基 + 贪心
3105: [cqoi2013]新Nim游戏 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 839 Solved: 490[Submit][Stat ...
- bzoj千题计划194:bzoj2115: [Wc2011] Xor
http://www.lydsy.com/JudgeOnline/problem.php?id=2115 边和点可以重复经过,那最后的路径一定是从1到n的一条路径加上许多环 dfs出任意一条路径的异或 ...
随机推荐
- [bzoj 1143]最长反链二分图最大匹配
Dilworth定理:偏序集能划分成的最少的全序集的个数与最大反链的元素个数相等. 证明:http://www.cnblogs.com/itlqs/p/6636222.html 题目让求的是最大反链的 ...
- 获取html元素内容
html: <!DOCTYPE ><html> <head> <meta http-equiv="Content-Type" conten ...
- ListView使用--文章集锦
详解ListView加载网络图片的优化,让你轻松掌握! ListView具有多种item布局--实现微信对话列 关注公众号,分享干货,讨论技术
- openstack中region、az、host aggregate、cell 概念
1. region 更像是一个地理上的概念,每个region有自己独立的endpoint,regions之间完全隔离,但是多个regions之间共享同一个keystone和dashboard.(注:目 ...
- 【洛谷 P3469】[POI2008]BLO-Blockade(割点)
题目链接 题意:一个无向联通图,求删去每个点及其所有边后有多少有序点对的连通性发生了变化. Tarjan求割点的例题.. 如果当前点不是割点,那么它对整个图的连通性不产生影响,只有自己与其他\(n-1 ...
- requests上传文件
""" requests上传文件时,如果文件名是中文,会导致上传失败,参考:https://www.cnblogs.com/liaofeifight/p/5807901. ...
- python 列表表达式、生成器表达式和协程函数
列表表达式.生成器表达式和协程函数 一.列表表达式: 常规方式示例: egg_list=[] for i in range(100): egg_list.append("egg%s" ...
- python学习笔记 操作文件和目录
如果我们要操作文件.目录,可以在命令行下面输入操作系统提供的各种命令来完成.比如dir.cp等命令. 如果要在Python程序中执行这些目录和文件的操作怎么办?其实操作系统提供的命令只是简单地调用了操 ...
- Mac-装机
不过大家可别被「命令行」三个字吓到,其实你只需按步骤来,复制粘贴命令即可快速完成,事实上是很简单的. 一.准备工作: 准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程会抹掉 ...
- python模块之copy
提供浅拷贝和深拷贝两种模式. =>copy(x):返回x的浅拷贝 =>deepcopy(x):返回x的深拷贝 浅拷贝和深拷贝: 浅拷贝复制不变对象,引用可变对象(如列表和字典): 深拷贝复 ...