题意

题目链接

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. 关于MQ,你必须知道的

    我走过最长的路是你的套路 女:二号男嘉宾,假如我们牵手成功后,你会买名牌包包给我吗? 男:那你会听话吗? 女:会 听话. 男:听话 咱不买! OK那么消息队列MQ有什么套路呢?(这个话题转换生硬度连我 ...

  2. 『审慎』.Net4.6 Task 异步函数 比 同步函数 慢5倍 踩坑经历

    异步Task简单介绍 本标题有点 哗众取宠,各位都别介意(不排除个人技术能力问题) —— 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 —— 异步编 ...

  3. Git - git branch - 查看远端所有分支

    索引: 目录索引 一.示例: git branch -r 二.说明: 该命令将列出仓库中所有存在的远端分支,无论该分支是否已签出到本地. 蒙 2018-09-29 19:59 周六

  4. Tomcat更新方法

    tomcat更新方法最简单的就是上官网下载最新版的压缩包,然后用新版本的 lib 文件替换掉旧版本的 lib 文件 具体方法(偷懒做个搬运工):https://jingyan.baidu.com/ar ...

  5. requirement failed: Unacceptable value for property 'kafka.timeline.metrics.host_in_memory_aggregation', boolean values must be either 'true' or 'false

    requirement failed: Unacceptable value for property 'kafka.timeline.metrics.host_in_memory_aggregati ...

  6. cordova build android Command failed with exit code EACCES

    问题: 执行cordova build android 出现输出如下,编译不成功. ANDROID_HOME=/Users/huangenai/Library/Android/sdkJAVA_HOME ...

  7. 没错,老板让我写个 BUG!

    前言 标题没有看错,真的是让我写个 bug! 刚接到这个需求时我内心没有丝毫波澜,甚至还有点激动.这可是我特长啊:终于可以光明正大的写 bug 了

  8. 通过Jenkins定期清除为None的镜像

    在代码持续交付过程中,依靠Jenkins生产Docker镜像时,会生成许多的名为None的中间镜像,这些镜像在整个项目生产过程完毕后意义不大,还占着空间,需要定期清理,通过手动方式实在是繁琐,也就有了 ...

  9. Java集合详解2:LinkedList和Queue

    今天我们来探索一下HashMap和HashTable机制与比较器的源码. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下哈 ...

  10. 不使用 webpack,vuejs 异步加载模板

    webpack 打包不会玩,整了这么个小玩具 一段 vue 绑定代码,关键点在 gmallComponent 1.异步加载外部 vue 文件(非 .vue) 2.按一定规则拆分 template.sc ...