题意

题目链接

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. 【JVM虚拟机】(5)---深入理解JVM-Class中常量池

    深入理解Class---常量池 一.概念 1.jvm生命周期 启动:当启动一个java程序时,一个jvm实例就诞生了,任何一个拥有main方法的class都可以作为jvm实例运行的起点. 运行:mai ...

  2. HTTP2和HTTPS来不来了解一下?

    一.前言 只有光头才能变强 HTTP博文回顾: PC端:HTTP就是这么简单 PC端:HTTP面试题都在这里 微信公众号端:HTTP就是这么简单 微信公众号端:HTTP面试题都在这里 本文力求简单讲清 ...

  3. Asp.NETCore轻松学系列阅读指引目录

    前言 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进阶,适合没有 .NETCore 编程经验到小白同学,也适合从 .NET Framework 迁移 ...

  4. kubernetes实践之二:Kubernetes可视WEB UI Dashboard搭建

    Kubernetes可视WEBUI Dashboard搭建 支持浏览器:火狐 一.Dashboard下载地址 git clone https://github.com/kubernetes/kuber ...

  5. springcloud和springboot是什么关系?

    [学习笔记] 4)springcloud和springboot是什么关系? 马克-to-win@马克java社区:springboot可以快速开发单个微服务.springcloud是一个基于sprin ...

  6. bug生命周期&bug跟踪处理

    一.BUG BUG:软件的缺陷 1.BUG的定义:----与软件测试的目的对应 软件的BUG,狭义概念是指软件程序的漏洞或缺陷,广义概念除此之外还包括测试工程师或用户所发现和提出的软件可改进的细节.或 ...

  7. windows无人值守文件的制作_autounattend.xml

    网址:http://www.windowsafg.com/office2010.html  Note:网络不能是国内网络(需要FQ),否则不能生成自动应答文件. 以Windows10为例:Window ...

  8. REST API disable / enable service auto start by API

    how to disable service auto start by API as the following how to enable service auto start by API as ...

  9. Linux:Day20(下) http基础

    Web Service Port number: 0-1023:众所周知,永久的分配给固定的应用使用,22/tcp(ssh),80/tcp(http),443/tcp(https) 1024-4195 ...

  10. VS2017搭建驱动开发环境WDK

    先安装VS2017,然后在安装WDK,WDK会自动关联到VS2017中,不用你任何操作,自动在新建项目中可以找到驱动开发. 如果以上安装完成后,在VS2017中新建项目中没有发现WDK,那么需要进行修 ...