2115: [Wc2011] Xor

Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 3853  Solved: 1609
[Submit][Status][Discuss]

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

思路:

先初始化ans = 任意一条1到n路径的异或和

之后DFS找出所有的环,并存下它们的异或和

将所有环的异或和加入线性基,之后贪心就行了,线性基内元素从大到小扫,如果ans异或后更大,那么就异或

最后就是答案

证明:

①如果环没有任意一个点在你那条初始路径上:

你可以专门走到那个环绕一圈后再原路返回,这样就相当于答案异或了那条环上的权值

②如果有一条1到n的路径比你选的这条更优

很显然这条更优的路径和你一开始选的路径构成了一个环,你走一遍这个环就相当于你原本的那条路径没有走过而走的是更优的那条了

③没有三了

#include<stdio.h>
#include<vector>
using namespace std;
#define LL long long
typedef struct
{int y;LL val;
}Road;
Road now;
vector<Road> G[100005];
int cnt, vis[100005];
LL sc[100005], a[300005], p[66];
void Sech(int u)
{int i;LL val;vis[u] = 1;for(i=0;i<G[u].size();i++){now = G[u][i];val = sc[u]^now.val;if(vis[now.y]==1)a[++cnt] = val^sc[now.y];else{sc[now.y] = val;Sech(now.y);}}
}
int main(void)
{LL ans, val;int n, m, i, j, x, y;scanf("%d%d", &n, &m);for(i=1;i<=m;i++){scanf("%d%d%lld", &x, &y, &val);now.y = y, now.val = val;G[x].push_back(now);now.y = x;G[y].push_back(now);}sc[1] = 0;vis[1] = 1;Sech(1);ans = sc[n];for(i=1;i<=cnt;i++){for(j=62;j>=0;j--){if(a[i]&(1ll<<j)){if(p[j]==0){p[j] = a[i];break;}elsea[i] ^= p[j];}}}for(i=62;i>=0;i--){if((ans^p[i])>ans)ans = ans^p[i];}printf("%lld\n", ans);return 0;
}

bzoj 2115: [Wc2011] Xor(DFS+线性基)相关推荐

  1. BZOJ 2115 Wc2011 Xor DFS+高斯消元

    标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...

  2. BZOJ 2115 [Wc2011] Xor ——线性基

    [题目分析] 显然,一个路径走过两边是不需要计算的,所以我么找到一条1-n的路径,然后向该异或值不断异或简单环即可. 但是找出所有简单环是相当复杂的,我们只需要dfs一遍,找出所有的环路即可,因为所有 ...

  3. 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径

    //bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...

  4. HDU3949 XOR (线性基、查找第k小值)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 我们用高斯消元求出的a1,a2,-,ana_1,a_2, \dots,a_na1​,a2​,-,an​ ...

  5. 【2019牛客暑期多校训练营(第一场) - H】XOR(线性基,期望的线性性)

    题干: 链接:https://ac.nowcoder.com/acm/contest/881/H 来源:牛客网 Bobo has a set A of n integers a1,a2,-,ana1, ...

  6. BZOJ 3168: [Heoi2013]钙铁锌硒维生素 [线性基 Hungary 矩阵求逆]

    3168: [Heoi2013]钙铁锌硒维生素 题意:给一个线性无关组A,再给一个B,要为A中每个向量在B中选一个可以代替的向量,替换后仍然线性无关.判断可行和求字典序最小的解 PoPoQQQ orz ...

  7. BZOJ2115 XOR(线性基)

    前置知识:线性基 题目描述 有一个边权为非负数的无向连通图,节点编号为 1 1 1到 n n n.求一条从 1 1 1到 n n n的路径,使得路径上经过的边的边权的异或和最大. 路径可以重复经过点和 ...

  8. 【Bzoj 2460 [BeiJing2011]】——元素 线性基+贪心

    Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔 法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力 ...

  9. 牛客 - 17968 - xor序列 - 线性基

    https://ac.nowcoder.com/acm/problem/17968 下面是错误的做法,因为题目要求必须使用x,而y在check的时候不一定用到等价于x的线性基来构成. 正确的做法是直接 ...

最新文章

  1. 李飞飞获全球最权威女性领导力奖 Athena Award,讲述推动AI多元化三大原因(视频)...
  2. 粒子群算法(PSO)Matlab实现(两种解法)
  3. Paper:《NÜWA: Visual Synthesis Pre-training for Neural visUal World creAtion,女娲:用于神经视觉世界创造的视觉》翻译与解读
  4. Go Modules 的智障版本选择
  5. Rails Migration Data Model栏位修改及数据类型介绍
  6. 为移动端网页构造快速响应按钮
  7. .net bitmap rgb数据_Python商务与经济统计学-数据描述
  8. 前端笔记-使用vue-cli(脚手架)开发TodoList
  9. 鸿蒙系统使用体验,华为正式发布鸿蒙手机操作系统 HarmonyOS 2全场景体验来临 你手中的设备能否升级鸿蒙系统?...
  10. ASP.NET MVC 3 - 部分vs显示模板与编辑器模板
  11. 基于jquery实现身份证验证
  12. python 加汉明窗_什么是汉明窗?加Hanmming窗的作用?
  13. 基于matlab直方图均衡,matlab 直方图均衡实验报告.pdf
  14. 手把手教你U盘装Raid系统
  15. Programming Ruby 读书笔记(六)
  16. 零基础小白想学Python爬虫,但是不理解原理?5分钟带你理顺思路
  17. name '_name_' is not defined
  18. 指向指针数组的指针和指针数组类型的指针
  19. JZOJ 1775. 合并果子2 (Standard IO)
  20. 阿里AI天池大赛-二手车交易价格预测-回归算法与模型融合

热门文章

  1. python爬虫什么意思-网络爬虫是什么(python爬虫有什么用)
  2. 北京理工大学语音识别技术.ppt
  3. vue前端动态分页模板(记录)
  4. ntp时间同步会导致mysql关闭吗_NTP 时间同步网络弱电系统安全监测平台研究
  5. echarts 饼图
  6. 【排序】剑指offer:数组中重复的数字
  7. 蓝桥c++2013真题:逆波兰表达式(代码填空题)
  8. ijkplayer-音视频变速播放实现
  9. matlab中弹性碰撞课程设计,完全弹性碰撞matlab.doc
  10. linux后台执行shell脚本