bzoj2115(线性基)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2115
题意:求图中路径1~n上最大边权 xor 和
思路:参见 blog http://blog.csdn.net/qwb492859377/article/details/52939589
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define ll long long
using namespace std; const int MAXN = 5e5 + ;
const int inf = 0x3f3f3f3f; struct Edge {
ll val;
int v, nxt;
} E[MAXN * ]; int head[MAXN], id; void edge_init() {
id = ;
memset(head, -, sizeof(head));
} void edge_add(int u, int v, ll val) {
E[id].v = v;
E[id].val = val;
E[id].nxt = head[u];
head[u] = id++;
} int n, m, sz;
ll A[MAXN], P[], dis[MAXN]; void Guass_base(void) {
memset(P, , sizeof(P));
for(int i = ; i <= sz; i++) {
for(int j = ; j >= ; j--) {
if(!(A[i] >> j & )) continue;
if(!P[j]) {
P[j] = A[i]; break;
}
A[i] ^= P[j];
}
}
} void DFS(int u, ll s) {
if(dis[u] == -) dis[u] = s;
else {
A[++sz] = s ^ dis[u];
return;
}
for(int i = head[u]; ~i; i = E[i].nxt) {
int v = E[i].v;
DFS(v, s ^ E[i].val);
}
} int main(void) {
while(~scanf("%d%d", &n, &m)) {
sz = ;
edge_init();
memset(dis, -, sizeof(dis));
for(int i = ; i <= m; i++) {
int u, v;
ll val;
scanf("%d%d%lld", &u, &v, &val);
edge_add(u, v, val);
edge_add(v, u, val);
}
DFS(, );
Guass_base();
ll ans = dis[n];
for(int i = ; i >= ; i--) {
ans = max(ans, ans ^ P[i]);
}
printf("%lld\n", ans);
}
return ;
}
bzoj2115(线性基)的更多相关文章
- 【BZOJ2115】Xor(线性基)
[BZOJ2115]Xor(线性基) 题面 BZOJ Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si ...
- 【BZOJ2115】[Wc2011] Xor 高斯消元求线性基+DFS
[BZOJ2115][Wc2011] Xor Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ...
- 【BZOJ-2115】Xor 线性基 + DFS
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2142 Solved: 893[Submit][Status] ...
- BZOJ2115:[WC2011] Xor(线性基)
Description Input 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 ...
- BZOJ2115 [Wc2011] Xor 【线性基】
2115: [Wc2011] Xor Time Limit: 10 Sec Memory Limit: 259 MB Submit: 3915 Solved: 1633 [Submit][Stat ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
- bzoj2115 [Wc2011] Xor——高斯消元 & 异或线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 异或两次同一段路径的权值,就相当于没有走这段路径: 由此可以得到启发,对于不同的走法, ...
- 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...
- BZOJ2322 [BeiJing2011]梦想封印 【set + 线性基】
题目链接 BZOJ2322 题解 鉴于BZOJ2115,要完成此题,就简单得多了 对图做一遍\(dfs\),形成\(dfs\)树,从根到每个点的路径形成一个权值,而每个返祖边形成一个环 我们从根出发去 ...
随机推荐
- Three.js响应和移动物体
效果图 demo import './index.css'; // stats var stats; (function(){ stats = new Stats(); document.body.a ...
- Lambda语句中创建自定义类型时,也可指定某种特定类型,方法是在new与{}之间写上类型名称
如: var fc =...ChildFath = fc.Select(c => new Child_Father { child = c.child, father = c.father }) ...
- Ubuntu下编写C语言程序
新建C文件,新建一个文件用touch,新建文件夹用mkdir. 打开文本编辑器,编辑C文件,命令用gedit xxx.C 编写C程序,Ctrl+S保存 编译运行 1.gcc命令是编译 -o是可选项 是 ...
- leetcode812
class Solution { public: double largestTriangleArea(vector<vector<int>>& points) { d ...
- 04.webservice客户端调用
不要求所有的元素都理解,真正做开发的时候,有一些必须是要用的. 以后我们做开发的时候服务访问点的集合就一个服务的访问点.服务访问点绑定了具体的一个服务类,绑定的这个东西它本身也是一个元素.往上找,四个 ...
- A Recipe for Training Neural Networks [中文翻译, part 1]
最近拜读大神Karpathy的经验之谈 A Recipe for Training Neural Networks https://karpathy.github.io/2019/04/25/rec ...
- c语言学习笔记 break语句
比如 for() { for() { break; } } 那个break语句只是跳出它所在的那个for循环,不会把最外面的for循环都跳出去.
- Vivado生成edf文件
https://china.xilinx.com/support/answers/54074.html 综合完成后会跳出个框框,选择open synthesis write_edif module. ...
- 将DataTable进行分页并生成新的DataTable
/// <summary> /// 将DataTable进行分页并生成新的DataTable /// </summary> /// <param name="d ...
- [转]sessionStorage()和localStorage()的用法
JS的本地保存localStorage.sessionStorage用法总结: 1. localStorage.sessionStorage是Html5的特性,IE7以下浏览器不支持 为什么要掌握lo ...