一、题目

  [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 【图上线性基】的更多相关文章

  1. [WC2011]最大XOR和路径 线性基

    [WC2011]最大XOR和路径 LG传送门 需要充分发掘经过路径的性质:首先注意不一定是简单路径,但由于统计的是异或值,重复走是不会被统计到的,考虑对于任意一条从\(1\)到\(n\)的路径的有效部 ...

  2. 洛谷P4151 [WC2011] 最大XOR和路径 [线性基,DFS]

    题目传送门 最大XOR和路径 格式难调,题面就不放了. 分析: 一道需要深刻理解线性基的题目. 好久没打过线性基的题了,一开始看到这题还是有点蒙逼的,想了几种方法全被否定了.还是看了大佬的题解才会做的 ...

  3. [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 说明 [样例说明] 根据异或的性质,将一个数异或两 ...

  4. CF1101G (Zero XOR Subset)-less 线性基

    传送门 既然每一次选择出来的都是一个子段,不难想到前缀和计算(然而我没有想到--) 设异或前缀和为\(x_i\),假设我们选出来的子段为\([1,i_1],(i_1,i_2],...,(i_{k-1} ...

  5. 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 ...

  6. P4151 最大XOR和路径 线性基

    题解见:https://www.luogu.org/problemnew/solution/P4151 其实就是找出所有环 把环上所有边异或起来得到的值扔到线性基里面 然后随便走一条从1~n的链 最后 ...

  7. 牛客练习赛26 D xor序列 (线性基)

    链接:https://ac.nowcoder.com/acm/contest/180/D 来源:牛客网 xor序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他 ...

  8. 【2017西安邀请赛:A】XOR(线段树+线性基)

    前言:虽然已经有很多题解了,但是还是想按自己的理解写一篇. 思路:首先分析题目 一.区间操作 —— 线段树 二.异或操作 —— 线性基 这个两个不难想,关键是下一步的技巧 “或”运算 就是两个数的二进 ...

  9. 2019年牛客多校第四场 B题xor(线段树+线性基交)

    题目链接 传送门 题意 给你\(n\)个基底,求\([l,r]\)内的每个基底是否都能异或出\(x\). 思路 线性基交板子题,但是一直没看懂咋求,先偷一份咖啡鸡板子写篇博客吧~ 线性基交学习博客:传 ...

随机推荐

  1. vue中子组件更新父组件

    当在子组件里更改了某些信息且关闭子组件后,需要父组件更新修改后的内容,该如何操作 1.$emit触发 父组件 @add="add(val)" 子组件 this.$emit('add ...

  2. nmap进阶使用[脚本篇]

        nmap 进阶使用 [ 脚本篇 ] 2017-05-18 NMAP 0x01 前言 因为今天的重点并非nmap本身使用,这次主要还是想给大家介绍一些在实战中相对比较实用的nmap脚本,所以关于 ...

  3. 使用 js 实现十大排序算法: 希尔排序

    使用 js 实现十大排序算法: 希尔排序 希尔排序 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  4. Android Studio & Flutter Plugins & Dart plugins

    Android Studio & Flutter Plugins & Dart plugins https://flutter.dev/docs/get-started/editor? ...

  5. taro coding specification

    taro coding specification https://nervjs.github.io/taro/docs/spec-for-taro.html 跨平台开发 https://nervjs ...

  6. js & disabled right click & disabled right menu

    js & disabled right click (() => { const log = console.log; log(`disabled copy`); document.bo ...

  7. 开源OA办公平台搭建教程:O2OA+Arduino实现物联网应用(二)

    O2OA平台搭建 O2OA的开发环境非常简单,安装服务器后即可通过浏览器进行开发了和使用.具体可参考文档库中的其他文档,有比较详细的介绍,这里就不再赘述了. Arduino开发发环境搭建 安装Ardu ...

  8. springboot对数据库密码加密

    第一步:maven引jar包 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifa ...

  9. 读懂RESTful风格

    RESTful就是资源定位和资源操作的风格.不是标准也不是协议. REST即Representational State Transfer的缩写,可译为"表现层状态转化".REST ...

  10. springboot项目打包成jar包在Linux服务器默认80端口运行

    springboot项目端口设置 在application.properties文件 server.port=80 在application.yml文件 server: port: 80 然后在ide ...