[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号节点,这个节点 ...
随机推荐
- Java到底怎么学?
你现在是不是想学Java,但很迷茫不知该从何下手,那么请认真看完这篇文章,希望对你有所帮助! 作为零基础刚刚接触Java的朋友们来说,我的建议还是先看视频,虽然有很多人说看视频学习慢,建议直接买优秀的 ...
- Java基础语法(语法、位运算、JavaDoc等)
一.注释.标识符.关键字 1.注释(comments) 平时我们编写代码,在代码量比较少的时候,我们还可以看懂自己编写的代码,但是当项目结构一旦复杂起来,我们就需要用到注释了! 注释并不会被程序执行, ...
- 寻找最佳路径(ArcPy实现)
一.背景 随着社会经济发展需求,公路的重要性日益提高.在一些交通欠发达的地区,公路建设迫在眉睫.如何根据实际地形情况设计出比较合理的公路规划,是一个值得研究的问题. 二.实验目的: (1)通过练习,熟 ...
- 题解 P6454 麻将 加强版
题目传送门 题目大意 不想写了,直接看题面吧. 思路 被这个题搞自闭了,因为读错题目想一个非常恶心的东西想了一场考试,然后就删代码,然后就被骂了.哎. 需要注意的是:我们只能选一次雀头 于是,不难看出 ...
- 【java】关键字this怎么用?
摘至:https://www.php.cn/java/guide/462643.html java中this关键字的用法:1.当成员变量和局部变量重名时,在方法中使用this时,表示的是该方法所在类中 ...
- 2.2 DDD Layers & Clean Architecture DDD分层和简洁架构
DDD Layers & Clean Architecture DDD分层和简洁架构 There are four fundamental layers of a Domain Driven ...
- [Git系列] Git 基本概念
版本控制系统 版本控制系统是一种帮助软件开发者实现团队合作和历史版本维护的软件,一个版本控制系统应具备以下列出的这几个基本功能: 允许开发者并发工作: 不允许一个开发者覆写另一个开发者的修改: 保存所 ...
- Java中的函数式编程(七)流Stream的Map-Reduce操作
写在前面 Stream 的 Map-Reduce 操作是Java 函数式编程的精华所在,同时也是最为复杂的部分.但一旦你啃下了这块硬骨头,那你就真正熟悉Java的函数式编程了. 如果你有大数据的编程经 ...
- cadence 技巧
pcb中如何选中完整的一条网络? 1 edit properties 右边 find nets 2 cadence 选中不同的网络高亮 display--->assign color在opt ...
- Python爬虫之爬取淘女郎照片示例详解
这篇文章主要介绍了Python爬虫之爬取淘女郎照片示例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 本篇目标 抓取淘宝MM ...