[luogu3733]八纵八横

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 1005
4 #define bt bitset<N>
5 #define L (k<<1)
6 #define R (L+1)
7 #define mid (l+r>>1)
8 struct ji{
9 int nex,to;
10 bt len;
11 }edge[N];
12 int V,E,n,m,t,q,x,y,head[N],vis[N],tim[N];
13 char s[N];
14 bt o,sh[N],f[31][N];
15 pair<bt,bt>val[N];
16 vector<bt>v[N<<2];
17 void read(){
18 scanf("%s",s);
19 o.reset();
20 int l=strlen(s);
21 for(int i=0;i<l;i++)o[l-i-1]=s[i]-'0';
22 }
23 void write(bt o){
24 bool flag=0;
25 for(int i=N-6;i>=0;i--)
26 if ((flag)||(o[i])){
27 x=o[i];
28 printf("%d",x);
29 flag=1;
30 }
31 if (!flag)printf("0");
32 printf("\n");
33 }
34 void add(bt x){
35 for(int i=N-6;i>=0;i--)
36 if (x[i])
37 if (f[V][i].any())x^=f[V][i];
38 else{
39 f[V][i]=x;
40 break;
41 }
42 }
43 bt query(){
44 o.reset();
45 for(int i=N-6;i>=0;i--)
46 if (!o[i])o^=f[V][i];
47 return o;
48 }
49 void add(int x,int y,bt z){
50 edge[E].nex=head[x];
51 edge[E].to=y;
52 edge[E].len=z;
53 head[x]=E++;
54 }
55 void dfs(int k,bt x){
56 vis[k]=1;
57 sh[k]=x;
58 for(int i=head[k];i!=-1;i=edge[i].nex)
59 if (!vis[edge[i].to])dfs(edge[i].to,x^edge[i].len);
60 else add(sh[edge[i].to]^sh[k]^edge[i].len);
61 }
62 void New(){
63 V++;
64 for(int i=0;i<N-5;i++)f[V][i]=f[V-1][i];
65 }
66 void update(int k,int l,int r,int x,int y,bt z){
67 if ((l>y)||(x>r))return;
68 if ((x<=l)&&(r<=y)){
69 v[k].push_back(z);
70 return;
71 }
72 update(L,l,mid,x,y,z);
73 update(R,mid+1,r,x,y,z);
74 }
75 void dfs(int k,int l,int r){
76 if (l>r)return;
77 New();
78 for(int i=0;i<v[k].size();i++)add(v[k][i]);
79 if (l==r)write(query());
80 else{
81 dfs(L,l,mid);
82 dfs(R,mid+1,r);
83 }
84 V--;
85 }
86 int main(){
87 scanf("%d%d%d",&n,&m,&q);
88 memset(head,-1,sizeof(head));
89 for(int i=1;i<=m;i++){
90 scanf("%d%d",&x,&y);
91 read();
92 add(x,y,o);
93 add(y,x,o);
94 }
95 o.reset();
96 dfs(1,o);
97 for(int i=1;i<=q;i++){
98 scanf("%s",s);
99 if (s[0]=='A'){
100 scanf("%d%d",&x,&y);
101 read();
102 tim[++t]=i;
103 val[t]=make_pair(sh[x]^sh[y],o);
104 }
105 else{
106 scanf("%d",&x);
107 update(1,1,q,tim[x],i-1,val[x].first^val[x].second);
108 if (s[1]=='a')tim[x]=-1;
109 else{
110 read();
111 tim[x]=i;
112 val[x].second=o;
113 }
114 }
115 }
116 for(int i=1;i<=t;i++)
117 if (tim[i]>0)update(1,1,q,tim[i],q,val[i].first^val[i].second);
118 write(query());
119 dfs(1,1,q);
120 }
[luogu3733]八纵八横的更多相关文章
- 【Luogu3733】[HAOI2017]八纵八横(线性基,线段树分治)
[Luogu3733][HAOI2017]八纵八横(线性基,线段树分治) 题面 洛谷 题解 看到求异或最大值显然就是线性基了,所以只需要把所有环给找出来丢进线性基里就行了. 然后线性基不资磁撤销?线段 ...
- 【luogu3733】【HAOI2017】 八纵八横 (线段树分治+线性基)
Descroption 原题链接 给你一个\(n\)个点的图,有重边有自环保证连通,最开始有\(m\)条固定的边,要求你支持加边删边改边(均不涉及最初的\(m\)条边),每一次操作都求出图中经过\(1 ...
- [Luogu3733][HAOI2017]八纵八横
luogu sol 线性基+线段树分治傻题. 复杂度应该是\(O((n+m\log n)\frac{L^2}{\omega})\)? code #include<cstdio> #incl ...
- 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横
不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...
- LOJ2312 LUOGU-P3733「HAOI2017」八纵八横 (异或线性基、生成树、线段树分治)
八纵八横 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路的两端都是城市(可能两端是同一个 ...
- loj#2312. 「HAOI2017」八纵八横(线性基 线段树分治)
题意 题目链接 Sol 线性基+线段树分治板子题.. 调起来有点自闭.. #include<bits/stdc++.h> #define fi first #define se secon ...
- 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...
- LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset
题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...
- [HAOI2017]八纵八横 线性基
题面 题面 题解 观察到题目中的 "内陆经济环" 不好处理,因此我们把它拆成 "内陆经济链". 对于1号节点,我们创建一个它的复制节点n + 1号节点,这个节点 ...
随机推荐
- Serverless 在 SaaS 领域的最佳实践
作者 | 计缘 来源 | Serverless 公众号 随着互联网人口红利逐渐减弱,基于流量的增长已经放缓,互联网行业迫切需要找到一片足以承载自身持续增长的新蓝海,产业互联网正是这一宏大背景下的新趋势 ...
- Java秘诀!Java关系运算符介绍
运算符丰富是 Java 语言的主要特点之一,它提供的运算符数量之多,在高级语言中是少见的. Java 语言中的运算符除了具有优先级之外,还有结合性的特点.当一个表达式中出现多种运算符时,执行的先后顺序 ...
- 用C++实现的数独解题程序 SudokuSolver 2.2 及实例分析
SudokuSolver 2.2 程序实现 根据 用C++实现的数独解题程序 SudokuSolver 2.1 及实例分析 里分析,对 2.1 版做了一些改进和尝试. CQuizDealer 类声明部 ...
- print spooler LPF 打印机漏洞
打印机漏洞 该漏洞可以通过创建打印机驱动和端口,实现任意文件写入,用于提权或者写入后门. 打印机调用流程:client通过RPC调用server的spoolsv.exe,spoolsv.exe是sys ...
- 3.3 Execution Flow of a DDD Based Application 基于DDD的应用程序执行流程
3.3 Execution Flow of a DDD Based Application 基于DDD的应用程序执行流程 The figure below shows a typical reques ...
- 【Java虚拟机10】ClassLoader.getSystemClassLoader()流程简析
前言 学习类加载必然离开不了sun.misc.Launcher这个类和Class.forName()这个方法. 分析ClassLoader.getSystemClassLoader()这个流程可以明白 ...
- 【UE4 C++ 基础知识】<2> UFUNCTION宏、函数说明符、元数据说明符
UFunction声明 UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数.UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文 ...
- 计算机网络传输层之TCP拥塞控制(慢开始与拥塞避免、快重传和快恢复)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105532044 学习课程:<2019王道考研计算机网络> 学习目的 ...
- Java 将Excel转为et和ett格式
以.et结尾的文件格式是属于金山办公软件WPS Office中的电子表格文件,.ett是一种模板文件格式.除了通过WPS软件可以创建该格式的电子表格外,也可以通过格式转换的方法来获得,如将Micros ...
- 基于live555开发嵌入式linux系统的rtsp直播服务
最近要搞一个直播服务,车机本身是个前后双路的Dvr,前路1080P 25fps,后路720P 50fps,现在要连接手机app预览实时画面,且支持前后摄像头画面切换. 如果要做直播,这个分辨率和帧率是 ...