[Luogu3733][HAOI2017]八纵八横
sol
线性基+线段树分治傻题。
复杂度应该是\(O((n+m\log n)\frac{L^2}{\omega})\)?
code
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<bitset>
using namespace std;
const int N = 1005;
#define ll bitset<N>
int gi(){
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=0,ch=getchar();
while (ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
return w?x:-x;
}
char s[N];
ll gl(){
scanf("%s",s);int len=strlen(s);ll x;x.reset();
for (int i=0;i<len;++i) x[len-i-1]=s[i]-'0';return x;
}
void po(ll x){
int i=N-1;while (!x[i]) --i;
while (~i) putchar(x[i]+'0'),--i;puts("");
}
int n,m,q,to[N],nxt[N],head[N],cnt,fa[N],tot,id,pos[N];
ll ww[N],dis[N];vector<int>v[N<<2];
struct edge{int u,v,l,r;ll w;}E[N<<1];
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void link(int u,int v,ll w){
to[++cnt]=v;nxt[cnt]=head[u];ww[cnt]=w;head[u]=cnt;
to[++cnt]=u;nxt[cnt]=head[v];ww[cnt]=w;head[v]=cnt;
}
void dfs(int u,int f){
for (int e=head[u];e;e=nxt[e])
if (to[e]!=f) dis[to[e]]=dis[u]^ww[e],dfs(to[e],u);
}
void modify(int x,int l,int r,int ql,int qr,int i){
if (l>=ql&&r<=qr) {v[x].push_back(i);return;}
int mid=l+r>>1;
if (ql<=mid) modify(x<<1,l,mid,ql,qr,i);
if (qr>mid) modify(x<<1|1,mid+1,r,ql,qr,i);
}
struct xxj{
ll p[N];
void insert(ll x){
for (int i=N-1;~i;--i)
if (x[i]){
if (!p[i].any()) {p[i]=x;return;}
x^=p[i];
}
}
ll calc(){
ll x;x.reset();
for (int i=N-1;~i;--i)
if (!x[i]) x^=p[i];
return x;
}
}tmp;
void query(int x,int l,int r,xxj S){
for (auto i:v[x]) S.insert(dis[E[i].u]^dis[E[i].v]^E[i].w);
if (l==r) {po(S.calc());return;}int mid=l+r>>1;
query(x<<1,l,mid,S);query(x<<1|1,mid+1,r,S);
}
int main(){
n=gi();m=gi();q=gi();
for (int i=1;i<=n;++i) fa[i]=i;
for (int i=1;i<=m;++i){
int u=gi(),v=gi();ll w=gl();
if (find(u)^find(v)) link(u,v,w),fa[find(u)]=find(v);
else E[++tot]=(edge){u,v,0,q,w};
}
dfs(1,0);
for (int i=1;i<=q;++i){
scanf("%s",s);
if (s[0]=='A'){
int u=gi(),v=gi();ll w=gl();
E[++tot]=(edge){u,v,i,q,w};pos[++id]=tot;
}else if (s[1]=='h'){
int x=gi();ll w=gl();
E[pos[x]].r=i-1;E[++tot]=(edge){E[pos[x]].u,E[pos[x]].v,i,q,w};pos[x]=tot;
}else{
int x=gi();E[pos[x]].r=i-1;pos[x]=-1;
}
}
for (int i=1;i<=tot;++i) modify(1,0,q,E[i].l,E[i].r,i);
query(1,0,q,tmp);return 0;
}
[Luogu3733][HAOI2017]八纵八横的更多相关文章
- 【Luogu3733】[HAOI2017]八纵八横(线性基,线段树分治)
[Luogu3733][HAOI2017]八纵八横(线性基,线段树分治) 题面 洛谷 题解 看到求异或最大值显然就是线性基了,所以只需要把所有环给找出来丢进线性基里就行了. 然后线性基不资磁撤销?线段 ...
- 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横
不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...
- 洛谷.3733.[HAOI2017]八纵八横(线性基 线段树分治 bitset)
LOJ 洛谷 最基本的思路同BZOJ2115 Xor,将图中所有环的异或和插入线性基,求一下线性基中数的异或最大值. 用bitset优化一下,暴力的复杂度是\(O(\frac{qmL^2}{w})\) ...
- [HAOI2017]八纵八横 线性基
题面 题面 题解 观察到题目中的 "内陆经济环" 不好处理,因此我们把它拆成 "内陆经济链". 对于1号节点,我们创建一个它的复制节点n + 1号节点,这个节点 ...
- 【luogu3733】【HAOI2017】 八纵八横 (线段树分治+线性基)
Descroption 原题链接 给你一个\(n\)个点的图,有重边有自环保证连通,最开始有\(m\)条固定的边,要求你支持加边删边改边(均不涉及最初的\(m\)条边),每一次操作都求出图中经过\(1 ...
- 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 ...
- LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset
题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...
- [luogu3733]八纵八横
根据$[WC2011]XOR$的思路,每次暴力重构线性基,令$l'=\frac{l^{2}}{w}$,则有一个$nql'$的做法(这里线性基位数很多,所以要用bitset) 由于初始连通,因此每一个环 ...
随机推荐
- Cup fungus in Corvobado Nation Park,Costa Rica
- IIS应用程序池自动停止,报503错误解决方法
前两天遇见一个问题,部署网站之后,浏览时总是报503,找了半天才发现是用户权限问题,现在记录一下,方便以后遇到的大伙快速解决问题,以至于不会浪费太多时间 解决方法: 应 用程序-特定 权限设置未将 C ...
- Aliexpress API 授权流程整理(转载)
前言 我零零总总用了好几个月的时间,写了一个自用的小程序,从 Aliexpress 上抓取订单的小程序.刚开始写的时候,该API还没有开放,而且没有订单相关的功能.我完全是通过模拟用户在网页上的操作来 ...
- 计算机基础教程11 - 互联网&内联网
在本章中,我们将看到什么是Internet和Intranet,以及讨论两者之间的异同. 互联网 它是互联计算机网络的全球/全球系统.它使用标准的Internet协议(TCP / IP).Interne ...
- UVa 1636 决斗
https://vjudge.net/problem/UVA-1636 题意: 首先在手枪里随机装了一些子弹,然后抠了一枪,发现没有子弹.你希望下一枪也没有子弹,是应该直接再抠一枪还是随机转一下再抠. ...
- Qt570_CentOS64x64_01
ZC: 其实 主要是要安装 OpenGL,具体看"3"... ... 1.运行 "/opt/Qt5.7.0/Tools/QtCreator/bin/qtcreator&q ...
- kissy初体验-waterfall
目录: 1. 功能介绍 2. waterfall样例展示 3. 使用说明 4. 遇到过的问题 5. 总结 1. 功能介绍 现在越来越多的网站开始瀑布流方式布局,瀑布流式布局(百度百科:瀑布流),是比较 ...
- Sql Server 开放4399端口命令行
netsh advfirewall firewall add rule name="Open Port 80" dir=in action=allow protocol=TCP l ...
- hdu4965矩阵快速幂
这题不能直接按常规做啊,因为数组根本就开不下,转换思维A(B*A)^(n*n-1)B 这样的话数组B*A就是10*10了,然后快速幂就行了 刚开始数组都开小了,tle,还找了半天bug...还有就是定 ...
- mysql 常见数据类型
---恢复内容开始--- MySQL常见的数据类型 一.数据类型是什么? 数据类型是指列.存储过程参数.表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型. 有一些数据是要存储为 ...