题意

题目链接

Sol

线性基+线段树分治板子题。。

调起来有点自闭。。

#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define bit bitset<B + 1>
using namespace std;
const int MAXN = 501, B = 1001, SS = 4001;
inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, M, Q, las[SS];
struct Graph {
struct Edge {
int u, v;
bit w;
int nxt;
}E[3021];
int head[MAXN], num, vis[MAXN];
Graph() {
memset(head, -1, sizeof(head));
memset(vis, 0, sizeof(vis));
num = 0;
}
bit P[B + 1], dis[MAXN];
void insert(bit s) {
for(int i = B; ~i; i--) {
if(s[i]) {
if(!P[i].count()) {P[i] = s; break;}
s = s ^ P[i];
}
}
}
void dfs(int x, int fa) {
vis[x] = 1;
for(int i = head[x]; ~i; i = E[i].nxt) {
int to = E[i].v; bit w = E[i].w;
if((i ^ 1) == fa) continue;
if(vis[to]) insert(dis[x] ^ dis[to] ^ w);
else {
dis[to] = dis[x] ^ w;
dfs(to, i);
}
}
}
void Query() {
bit ans; ans.reset();
for(int i = B; ~i; i--) if(ans[i] ^ (P[i][i])) ans ^= P[i];
for(int i = B; ~i; i--)
if(ans[i]) {
for(int j = i; ~j; j--) cout << ans[j];
puts("");
return ;
}
puts("0");
}
void AddEdge(int x, int y, bit w) {
E[num] = {x, y, w, head[x]};
head[x] =num++;
}
void Insert(int x, int y, bit w) {
insert(dis[x] ^ dis[y] ^ w);
} }bg;
struct Edge {
int u, v;
bit w;
}e[SS];
vector<Edge> tag[SS]; #define ls k << 1
#define rs k << 1 | 1
void Add(int k, int l, int r, int ql, int qr, Edge v) {
if(ql > qr) return ;
if(ql <= l && r <= qr) {tag[k].pb(v); return ;}
int mid = l + r >> 1;
if(ql <= mid) Add(ls, l, mid, ql, qr, v);
if(qr > mid) Add(rs, mid + 1, r, ql, qr, v);
}
void Down(int k, int l, int r, Graph now) {
if(l > r) return ;
Graph nxt = now;
for(auto flag: tag[k])
nxt.Insert(flag.u, flag.v, flag.w);
if(l == r) {
nxt.Query();
return ;
}
int mid = l + r >> 1;
Down(ls, l, mid, nxt);
Down(rs, mid + 1, r, nxt);
}
signed main() {
N = read(); M = read(); Q = read();
for(int i = 1; i <= M; i++) {
int x = read(), y = read(); bit w; cin >> w;
bg.AddEdge(x, y, w);
bg.AddEdge(y, x, w);
}
memset(las, -1, sizeof(las));
int youducuotile = 0;
for(int i = 1; i <= Q; i++) {
char opt[10]; scanf("%s", opt + 1);
if(opt[1] == 'A') {
e[++youducuotile ].u = read(), e[youducuotile ].v = read();
cin >> e[youducuotile ].w; las[youducuotile ] = i;
} else if(opt[1] == 'C' && opt[2] == 'a') {
int k = read();
Add(1, 1, Q, las[k], i - 1, e[k]);
las[k] = -1;
} else {
int k = read();
Add(1, 1, Q, las[k], i - 1, e[k]);
cin >> e[k].w;
las[k] = i;
}
}
for(int i = 1; i <= Q; i++)
if(~las[i])
Add(1, 1, Q, las[i], Q, e[i]);
bg.dfs(1, -1);
bg.Query();
if(Q)
Down(1, 1, Q, bg);
return 0;
}

loj#2312. 「HAOI2017」八纵八横(线性基 线段树分治)的更多相关文章

  1. 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)

    LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...

  2. LOJ 2302 「NOI2017」整数——压位线段树

    题目:https://loj.ac/problem/2302 压30位,a最多落在两个位置上,拆成两次操作. 该位置加了 a 之后,如果要进位或者借位,查询一下连续一段 0 / 1 ,修改掉,再在含有 ...

  3. 【LOJ】#3109. 「TJOI2019」甲苯先生的线段树

    LOJ#3109. 「TJOI2019」甲苯先生的线段树 发现如果枚举路径两边的长度的话,如果根节点的值是$x$,左边走了$l$,右边走了$r$ 肯定答案会是$(2^{l + 1} + 2^{r + ...

  4. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset

    题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...

  5. LOJ2312 LUOGU-P3733「HAOI2017」八纵八横 (异或线性基、生成树、线段树分治)

    八纵八横 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路的两端都是城市(可能两端是同一个 ...

  6. loj#2483. 「CEOI2017」Building Bridges 斜率优化 cdq分治

    loj#2483. 「CEOI2017」Building Bridges 链接 https://loj.ac/problem/2483 思路 \[f[i]=f[j]+(h[i]-h[j])^2+(su ...

  7. ACM-ICPC 2017 Asia Xi'an A XOR (线性基+线段树思想)

    题目链接 题意;给个数组,每次询问一个区间你可以挑任意个数的数字异或和 然后在或上k的最大值 题解:线性基不知道的先看这个,一个线性基可以log的求最大值把对应去区间的线性基求出来然后用线段树维护线性 ...

  8. P5607-[Ynoi2013]无力回天NOI2017【线性基,线段树,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P5607 题目大意 \(n\)个数字的序列,\(m\)次操作 区间\([l,r]\)异或上一个值\(v\) 询问区间 ...

  9. LOJ 3055 「HNOI2019」JOJO—— kmp自动机+主席树

    题目:https://loj.ac/problem/3055 先写了暴力.本来想的是 n<=300 的那个在树上暴力维护好整个字符串, x=1 的那个用主席树维护好字符串和 nxt 数组.但 x ...

随机推荐

  1. javascript引擎执行的过程的理解--语法分析和预编译阶段

    一.概述 js是一种非常灵活的语言,理解js引擎的执行过程对于我们学习js是非常有必要的.看了很多这方便文章,大多数是讲的是事件循环(event loop)或者变量提升的等,并没有全面分析其中的过程. ...

  2. .NET Core IdentityServer4实战-开篇介绍与规划

    一.开篇寄语 由于假期的无聊,我决定了一个非常有挑战性的活动,也就是在年假给大家带来一个基于OAuth 2.0的身份授权框架,它就是 IdentityServer4 ,如果没有意外的话,一定可以顺利的 ...

  3. c#根据路径(url)下载图片

    方法一:根据路径下载图片 1 /// <summary> /// 图片另存为 /// </summary> /// <param name="url" ...

  4. C# 获取系统当前IE版本号

    1. 注册表中,IE的位置: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer 2. 通过注册表读取IE配 ...

  5. 自定义Json解析工具

    此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...

  6. c/c++ 网络编程 陈硕老师视频理解之ttcp

    ttcp 是干啥的:测试2台机器间的网络传输性能 wiki 功能如下图: 对应的视频是: 4.回顾基础的Sockets API.mkv 5.TTCP代码概览.mkv 6.使用TTCP进行网络传输性能测 ...

  7. 关于int main( int argc, char* argv[] ) 中arg和argv参数的解析及调试

    https://blog.csdn.net/LYJ_viviani/article/details/51873961 https://stackoverflow.com/questions/30241 ...

  8. 向MIP开源项目提交Issues

    Issues 是 GitHub 管理需求,讨论技术方案的方式,附:官方解释.MIP 是在 GitHub 上的开源项目,也使用 Issues 来做任务管理. 一.Issues 在 MIP 项目中的应用 ...

  9. php自动加载规范 PSR4 (Thinkphp)

    PSR4是一种自动加载规范,老版本是PSR0,尽管thinkPHP支持PSR4和PSR0的自动加载方式,但是默认也是优先进行PSR4加载,如果失败,再进行PSR0的加载.本篇文章只会讨论PSR4的加载 ...

  10. Android进阶之光-第1章-Android新特性-读书笔记

    第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...