题意

题目链接

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. 依赖注入容器-- Autofac

    目录: 一.简介 二.如何使用 2.1.基本使用 2.2.接口使用 2.3. 其他注入 2.4. 注入的生命周期 一.简介 在上一篇文章中讲到替换默认服务容器,我们选择了Autofac Autofac ...

  2. Redux的中间件原理分析

    redux的中间件对于使用过redux的各位都不会感到陌生,通过应用上我们需要的所有要应用在redux流程上的中间件,我们可以加强dispatch的功能.最近也有一些初学者同时和实习生在询问中间件有关 ...

  3. 一文带你认识Spring事务

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y Spring事务管理我相信大家都用得很多,但可能仅仅 ...

  4. Netty源码—六、tiny、small内存分配

    tiny内存分配 tiny内存分配流程: 如果申请的是tiny类型,会先从tiny缓存中尝试分配,如果缓存分配成功则返回 否则从tinySubpagePools中尝试分配 如果上面没有分配成功则使用a ...

  5. C# 将object对象转换为实体对象

    C# 将object对象转换为实体对象.一共两种方法. 第一种方法,代码如下: /// <summary> /// 将object对象转换为实体对象 /// </summary> ...

  6. Python json序列化

    Python内置的json模块提供了非常完善的对象到JSON格式的转换.废话不多说,我们先看看如何把Python对象变成一个JSON: d = dict(name='Kaven', age=17, s ...

  7. Yii2设计模式——静态工厂模式

    应用举例 yii\db\ActiveRecord //获取 Connection 实例 public static function getDb() { return Yii::$app->ge ...

  8. ArcGIS JavaScript API4.8 底图选择的几种方案

    创建一个HTML页面,引入ArcGIS JavaScript API,在<body>标签内创建一个div并添加ID值,在<head>标签内设置样式<style>,在 ...

  9. Button控件的点击事件

    Java的代码 主要重点: findViewById(); OnClickListener() package com.example.admin.myapplication; import andr ...

  10. C#中关于表达式与委托在EF中的不同表现总结

    Func<Invoice, bool> func = x => x.State == InvoiceState.Created; Expression<Func<Invo ...