BZOJ 2115: [Wc2011] Xor DFS + 线性基
2115: [Wc2011] Xor
Time Limit: 10 Sec Memory Limit: 259 MB
Description

Input
第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目。 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边。 图中可能有重边或自环。
Output
仅包含一个整数,表示最大的XOR和(十进制结果),注意输出后加换行回车。
Sample Input
1 2 2
1 3 2
2 4 1
2 5 1
4 5 3
5 3 4
4 3 2
Sample Output
HINT

Source
题解:
整个1->n的过程就是 一堆环和一条简单路径的异或和
任意环的异或和 任意组合起来,这个可以高斯消元求解,偷个懒利用线性基也是可以的
15年ccpc南阳与这个题做法相同,,算是双倍经验题:传送门
#include<bits/stdc++.h>
using namespace std;
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
typedef unsigned long long ULL;
const long long INF = 1e18+1LL;
const double pi = acos(-1.0);
const int N=5e5+,M=1e6+,inf=; LL dep[N],a[N],ins[N],ans;
int n,m,vis[N],cnt,t = ,head[N],has[N];
struct ss {
int to,next,id;
LL c;
}e[N * ];
void add(int u,int v,LL w,int id) {
e[t].next = head[u];
e[t].to = v;
e[t].c = w;
e[t].id = id;
head[u] = t++;
}
void dfs(int u,int f) {
vis[u] = vis[f] + ;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(has[e[i].id] || (vis[to] && vis[to] < vis[u])) continue;
if(vis[to]) {
a[++cnt] = dep[to] ^ dep[u] ^ e[i].c;
continue;
}
has[e[i].id] = ;
dep[to] = dep[u] ^ e[i].c;
dfs(to,u);
}
}
void go(int u,LL now) {
if(u == n) {
LL ret = now;
for(int i = ; i >= ; --i)
if((ins[i]^ret) > ret) ret^=ins[i];
ans = max(ans,ret);
return ;
}
vis[u] = ;
for(int i = head[u]; i; i = e[i].next) {
int to = e[i].to;
if(has[e[i].id]) continue;
has[e[i].id] = ;
go(to,now^e[i].c);
}
vis[u] = ;
}
int main() {
scanf("%d%d",&n,&m);
for(int i = ; i <= m; ++i) {
int x,y;LL z;
scanf("%d%d%lld",&x,&y,&z);
if(x == y) {
a[++cnt] = z;
continue;
}
add(x,y,z,i),add(y,x,z,i);
}
dfs(,);
for(int i = ; i <= cnt; ++i) {
for(int j = ; j >= ; --j) {
if(a[i]&(1LL<<j)) {
if(!ins[j]) {
ins[j] = a[i];
break;
}
a[i] ^= ins[j];
}
}
}
ans = ;
memset(vis,,sizeof(vis));
memset(has,,sizeof(has));
go(,);
cout<<ans<<endl;
return ;
}
BZOJ 2115: [Wc2011] Xor DFS + 线性基的更多相关文章
- bzoj 2115: [Wc2011] Xor【线性基+dfs】
-老是想到最长路上 其实可以这样:把每个环的xor和都存起来,然后任选一条1到n的路径的xor和ans,答案就是这个ans在环的线性基上跑贪心. 为什么是对的--因为可以重边而且是无相连通的,并且对于 ...
- 2115: [Wc2011] Xor (线性基+dfs)
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 5714 Solved: 2420 题目链接:https://w ...
- BZOJ 2115:Xor(线性基+DFS)
题目链接 题意 中文题意 思路 因为存在环和重边,边来回走是没有意义的,因此最终的答案应该是一条从1到n的路径权值异或上若干个环的权值,那么难点在于如何选取这些环的权值使得最终的答案更优. 使用到线性 ...
- BZOJ 2115 Wc2011 Xor DFS+高斯消元
标题效果:鉴于无向图.右侧的每个边缘,求一个1至n路径,右上路径值XOR和最大 首先,一个XOR并能为一个路径1至n简单的路径和一些简单的XOR和环 我们开始DFS获得随机的1至n简单的路径和绘图环所 ...
- BZOJ 2115: [Wc2011] Xor
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2794 Solved: 1184 [Submit][Stat ...
- BZOJ2115 [Wc2011] Xor 【线性基】
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 3915 Solved: 1633 [Submit][Stat ...
- bzoj 2115: [Wc2011] Xor xor高斯消元
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 797 Solved: 375[Submit][Status] ...
- BZOJ 2115: [Wc2011] Xor 线性基 dfs
https://www.lydsy.com/JudgeOnline/problem.php?id=2115 每一条从1到n的道路都可以表示为一条从1到n的道路异或若干个环的异或值. 那么把全部的环丢到 ...
- BZOJ.2115.[WC2011]Xor(线性基)
题目链接 \(Description\) 给定一张无向带边权图(存在自环和重边).求一条1->n的路径,使得路径经过边的权值的Xor和最大.可重复经过点/边,且边权和计算多次. \(Soluti ...
随机推荐
- HDU-4612 Warm up,tarjan求桥缩点再求树的直径!注意重边
Warm up 虽然网上题解这么多,感觉写下来并不是跟别人竞争访问量的,而是证明自己从前努力过,以后回头复习参考! 题意:n个点由m条无向边连接,求加一条边后桥的最少数量. 思路:如标题,tarjan ...
- 04-offsetLeft和style.left的区别
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Android Email check 正则表达式
Android Email check 正则表达式 (?:[-!#-\\'*+\\x2f-9=?A-Z^-~]+(?:\\.[-!#-\\'*+\\x2f-9=?A-Z^-~]+)*|\"( ...
- SPOJ GSS4 Can you answer these queries IV ——树状数组 并查集
[题目分析] 区间开方+区间求和. 由于区间开方次数较少,直接并查集维护下一个不是1的数的位置,然后暴力修改,树状数组求和即可. 这不是BZOJ上上帝造题7分钟嘛 [代码] #include < ...
- 《Spring Security3》第四章第三部分翻译下(密码加salt)
你是否愿意在密码上添加点salt? 如果安全审计人员检查数据库中编码过的密码,在网站安全方面,他可能还会找到一些令其感到担心的地方.让我们查看一下存储的admin和guest用户的用户名和密码值: 用 ...
- Dynamic Rankings(zoj 2112)
题意:带修改的第K大 #include<cstdio> #include<iostream> #include<cstring> #define N 400010 ...
- C语言函数调用及栈帧结构
source:http://blog.csdn.net/qq_29403077/article/details/53205010 一.地址空间与物理内存 (1)地址空间与物理内存是两个完全不同的概念, ...
- Day 13 Python 一之helloworld
直接肝程序吧! """ # 作业六:用户登录测试(三次机会) count = 1 while count <= 3: user = input('请输入用户名: ' ...
- luogu P2659 美丽的序列
题目背景 GD是一个热衷于寻求美好事物的人,一天他拿到了一个美丽的序列. 题目描述 为了研究这个序列的美丽程度,GD定义了一个序列的“美丽度”和“美丽系数”:对于这个序列的任意一个区间[l,r],这个 ...
- Ubuntu 16.04安装CrossOver容器来安装QQ(终极解决办法,亲测有效)
说明:此版本的QQ基本完美,但是有个缺点就是历史记录有些会显示乱码! 注意:此方法能完美解决这篇文章http://www.cnblogs.com/EasonJim/p/7118693.html的所有问 ...