BZOJ_2115 [Wc2011] Xor 【图上线性基】
一、题目
二、分析
比较有意思的一题,这里也学到一个结论:$1$到$N$的任意一条路径异或和,可以是一个任意一条$1$到$N$的异或和与图中一些环的异或和组合得到。因为一个数异或自己等于$0$。
对于这题,需要把所有的简单环先全部求出来,可以用$DFS$,然后用任意一条$1$到$N$的路径和的值与所有简单环的异或的值一起构造线性基(如果有不在路径上的环也没关系,可以走到这个环的位置再回来,相当于到这个环起点的这条路径走了两次,异或一下就抵消了),然后就是求最大值了。
三、AC代码
1 #include <bits/stdc++.h>
2
3 using namespace std;
4 #define ll long long
5 #define Min(a,b) ((a)>(b)?(b):(a))
6 #define Max(a,b) ((a)>(b)?(a):(b))
7 const int maxn = 5e4 + 13;
8 const int MAXL = 60;
9
10 struct edge
11 {
12 int to, rev;
13 ll cost;
14 edge(){}
15 edge(int to, ll cost, int rev){
16 this->to = to;
17 this->cost = cost;
18 this->rev = rev;
19 }
20 };
21 vector<edge> G[maxn];
22 ll sum[maxn], ans[maxn<<3], base[MAXL + 2];
23 int cnt;
24 bool flag[maxn];
25
26 void dfs(int s, int rev)
27 {
28 flag[s] = 1;
29 for(int i = 0; i < G[s].size(); i++) {
30 edge e = G[s][i];
31 if(rev != i) {
32 if(!flag[e.to]) {
33 sum[e.to] = sum[s]^e.cost;
34 dfs(e.to, e.rev);
35 }
36 else {
37 //记录环的异或值
38 ans[cnt++] = sum[e.to]^sum[s]^e.cost;
39 }
40 }
41 }
42 }
43
44 void getbase()
45 {
46 memset(base, 0, sizeof(base));
47 for(int i = 0; i < cnt; i++) {
48 for(int j = MAXL; j >= 0; j--) {
49 if( (ans[i]>>j) & 1) {
50 if(base[j]) {
51 ans[i] = ans[i]^base[j];
52 }
53 else {
54 base[j] = ans[i];
55 for(int k = j - 1; k >= 0; k--)
56 if( (base[j]>>k) & 1)
57 base[j] ^= base[k];
58 for(int k = j + 1; k <= MAXL; k++)
59 if( (base[k]<<j) & 1)
60 base[k] ^= base[j];
61 break;
62 }
63 }
64 }
65 }
66 }
67
68 int main()
69 {
70 freopen("input.txt", "r", stdin);
71 int n, m, from, to;
72 ll D;
73 edge e;
74 scanf("%d%d", &n, &m);
75 for(int i = 0; i < m; i++) {
76 scanf("%d%d%lld", &from, &to, &D);
77 G[from].push_back(edge(to, D, G[to].size() ));
78 G[to].push_back(edge(from, D, G[from].size() - 1));
79 }
80 memset(sum, 0, sizeof(sum));
81 memset(flag, 0, sizeof(flag));
82 cnt = 0;
83 dfs(1, -1);
84 getbase();
85 ll Ans = sum[n];
86 for(int i = MAXL; i >= 0; i--) {
87 if(Ans < (Ans^base[i]) )
88 Ans ^= base[i];
89 }
90 printf("%lld\n", Ans);
91 return 0;
92 }
BZOJ_2115 [Wc2011] Xor 【图上线性基】的更多相关文章
- [WC2011]最大XOR和路径 线性基
[WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部 ...
- 洛谷P4151 [WC2011] 最大XOR和路径 [线性基,DFS]
题目传送门 最大XOR和路径 格式难调,题面就不放了. 分析: 一道需要深刻理解线性基的题目. 好久没打过线性基的题了,一开始看到这题还是有点蒙逼的,想了几种方法全被否定了.还是看了大佬的题解才会做的 ...
- [luogu4151 WC2011] 最大XOR和路径 (线性基)
传送门 输入输出样例 输入样例#1: 5 7 1 2 2 1 3 2 2 4 1 2 5 1 4 5 3 5 3 4 4 3 2 输出样例#1: 6 说明 [样例说明] 根据异或的性质,将一个数异或两 ...
- CF1101G (Zero XOR Subset)-less 线性基
传送门 既然每一次选择出来的都是一个子段,不难想到前缀和计算(然而我没有想到--) 设异或前缀和为\(x_i\),假设我们选出来的子段为\([1,i_1],(i_1,i_2],...,(i_{k-1} ...
- CodeForces - 1101G :(Zero XOR Subset)-less(线性基)
You are given an array a1,a2,…,an of integer numbers. Your task is to divide the array into the maxi ...
- P4151 最大XOR和路径 线性基
题解见:https://www.luogu.org/problemnew/solution/P4151 其实就是找出所有环 把环上所有边异或起来得到的值扔到线性基里面 然后随便走一条从1~n的链 最后 ...
- 牛客练习赛26 D xor序列 (线性基)
链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...
- 【2017西安邀请赛:A】XOR(线段树+线性基)
前言:虽然已经有很多题解了,但是还是想按自己的理解写一篇. 思路:首先分析题目 一.区间操作 —— 线段树 二.异或操作 —— 线性基 这个两个不难想,关键是下一步的技巧 “或”运算 就是两个数的二进 ...
- 2019年牛客多校第四场 B题xor(线段树+线性基交)
题目链接 传送门 题意 给你\(n\)个基底,求\([l,r]\)内的每个基底是否都能异或出\(x\). 思路 线性基交板子题,但是一直没看懂咋求,先偷一份咖啡鸡板子写篇博客吧~ 线性基交学习博客:传 ...
随机推荐
- Leetcode(22)-括号生成
给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合. 例如,给出 n = 3,生成结果为: [ "((()))", "(()())& ...
- P1337 [JSOI2004]平衡点(模拟退火)题解
题意: 如图:有n个重物,每个重物系在一条足够长的绳子上.每条绳子自上而下穿过桌面上的洞,然后系在一起.图中X处就是公共的绳结.假设绳子是完全弹性的(不会造成能量损失),桌子足够高(因而重物不会垂到地 ...
- 【情人节选帽子】TCS34725颜色传感器和Python图形界面编程(STM32 HAL库)
截图 描述: l STM32 HAL库编程 l 使用模拟IIC通信,方便程序移植 l Python界面编写,蘑菇头的帽子是什么颜色 l STM32 HAL库串口通信 l Python界面使用 ...
- Monorepo All In One
Monorepo All In One monorepos 只是一种思想,或设计模式,架构风格 https://trunkbaseddevelopment.com/monorepos/ Lerna h ...
- GitHub Ribbons : 谈网站的安全性-资源链接如何 预防/实现 爬虫的批量下载!
GitHub Ribbons : 谈网站的安全性-资源链接如何 预防/实现 爬虫的批量下载! 预防方法: 1. 使用随机数字符串,拼接URL! https://camo.githubuserconte ...
- C# 6.0 Features , C# 7.0 Features
1 1 1 C# 6.0 Features http://stackoverflow.com/documentation/c%23/24/c-sharp-6-0-features#t=20160828 ...
- TypeScript & React & Jest
TypeScript & React & Jest create-react-app Jest ``tsx import React from 'react'; import { re ...
- text to JSON
text to JSON GeoLocaltion API https://www.cnblogs.com/xgqfrms/p/13283680.html https://repl.it/@xgqfr ...
- git cli all in one
git cli all in one https://www.atlassian.com/git/tutorials/learn-git-with-bitbucket-cloud git create ...
- git & github & git clone & 'git clone' failed with status 128
git & github & git clone & 'git clone' failed with status 128 'git clone' failed with st ...