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\). 思路 线性基交板子题,但是一直没看懂咋求,先偷一份咖啡鸡板子写篇博客吧~ 线性基交学习博客:传 ...
随机推荐
- Java中输出小数点后几位
笔试时候,遇到让你写输出小数点后几位,当时很是头疼,下来后,查了查发现,没什么难的.网上有各种情况都讨论了(一般分为4种),在这里我着重讨论一下比较实用,比较简单,比较方便操作的几种: 1 publi ...
- msfconsole web后门
一.PHP后门 在meterpreter中有一个名为PHP meterpreter的payload,利用这个可以成功反弹.步骤如下: 1. 使用msfvenom 创建一个webshell.php 2. ...
- 如何在没有显示器的情况下,查看 Raspberry Pi 3的 IP 信息(Raspberry Pi 3 ,IP Address)
1. 如何在没有显示器的情况下,查看 Raspberry Pi 3的 IP 信息(Raspberry Pi 3 ,IP Address) 1 IP Address Any device connect ...
- PPT online viewer
PPT online viewer PPT 在线查看器 SpeakerDeck https://speakerdeck.com/xgqfrms/python?slide=3 SlideShare ht ...
- auto switch HTTP protocol Chrome Extension
auto switch HTTP protocol Chrome Extension HTTPS auto switch to HTTP VPN https://chrome.google.com/w ...
- disable html input & pointer-events
disable html input & pointer-events css https://developer.mozilla.org/en-US/docs/Web/CSS/pointer ...
- Chrome debug & string to object & copy format json
Chrome debug & string to object & copy format json // save as global variable copy(JSON.stri ...
- Nestjs 修改dist目录
修改tsconfig.json { "compilerOptions": { "outDir": "./server-dist", // 这 ...
- Flutte 什么是Widget,RenderObjects和Elements
原文 Opacity API文档 有没有想过Flutter如何获取这些小部件并将其实际转换为屏幕上的像素? 您可能已经知道如何使用StatelessWidget和StatefulWidget.但是那些 ...
- Flutter: 监听App显示,隐藏
关键代码 class _MyAppState extends State<MyApp> with WidgetsBindingObserver { @override void initS ...