线段树分治+线形基。

线段树分治是个锤子??

以时间轴构建线段树,把每个环以“对线段树产生影响的时间区间”的形式加入线段树即可。

#include<bits/stdc++.h>
#define ll bitset<1005>
using namespace std;
const int N=1005;
struct base{
ll p[N];
void insert(ll x){
for (int i=N-1;i>=0;i--)
if (x[i])
if (p[i].any()) x^=p[i];
else {p[i]=x;return;}
}
} tmp;
struct edge{
int u,v,l,r;ll dist;
} loop[N<<1];
int head[N],vet[N],nxt[N],fa[N],pos[N];
int n,m,q,x,y,tot,cnt,len,now;
ll dist[N],d[N],z,res;
char ch[N],opt[20];
vector <int> E[N<<2];
int getint(){
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;
}
ll getll(){
scanf("%s",ch);int len=strlen(ch);ll x;
for (int i=0;i<len;++i) x[len-i-1]=ch[i]-'0';return x;
}
void add(int x,int y,ll z){
nxt[++tot]=head[x];
vet[tot]=y;
head[x]=tot;
dist[tot]=z;
}
int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void dfs(int u,int father){
for (int i=head[u];i;i=nxt[i]){
int v=vet[i];
if (v!=father) d[v]=d[u]^dist[i],dfs(v,u);
}
}
void modify(int u,int l,int r,int ql,int qr,int i){
if (ql<=l&&r<=qr){
E[u].push_back(i);
return;
}
int mid=l+r>>1;
if (ql<=mid) modify(u<<1,l,mid,ql,qr,i);
if (qr>mid) modify(u<<1|1,mid+1,r,ql,qr,i);
}
void query(int u,int l,int r,base b){
for (int i=0;i<E[u].size();i++){
int j=E[u][i];
b.insert(d[loop[j].u]^d[loop[j].v]^loop[j].dist);
}
if (l==r){
ll res=0;int j=N-1;
for (int i=N-1;i>=0;i--)
if (!res[i]) res^=b.p[i];
while (j>=0&&!res[j]) j--;
while (j>=0)
if (res[j]) putchar('1'),j--; else putchar('0'),j--;
puts("");
return;
}
int mid=l+r>>1;
query(u<<1,l,mid,b);
query(u<<1|1,mid+1,r,b);
}
int main(){
scanf("%d%d%d",&n,&m,&q);
for (int i=1;i<=n;i++) fa[i]=i;
for (int i=1;i<=m;i++){
x=getint(),y=getint(),z=getll();
if (find(x)^find(y)){
add(x,y,z),add(y,x,z);
fa[find(x)]=find(y);
}
else loop[++cnt]=(edge){x,y,0,q,z};
}
dfs(1,0);
for (int i=1;i<=q;i++){
scanf("%s",opt);
if (opt[0]=='A'){
x=getint(),y=getint(),z=getll();
loop[++cnt]=(edge){x,y,i,q,z};
pos[++now]=cnt;
} else
if (opt[1]=='h'){
x=getint(),z=getll();
loop[++cnt]=(edge){loop[pos[x]].u,loop[pos[x]].v,i,q,z};
loop[pos[x]].r=i-1;
pos[x]=cnt;
}
else{
x=getint();
loop[pos[x]].r=i-1;
pos[x]=-1;
}
}
for (int i=1;i<=cnt;i++)
modify(1,0,q,loop[i].l,loop[i].r,i);
query(1,0,q,tmp);
return 0;
}

[HAOI 2017]八纵八横的更多相关文章

  1. HAOI 2017 游记

    省选 2017年4月23日 流水账式游记,不喜勿喷. Day0: 准备出发,上午敲了一顿板子,板子敲完了就打小游戏,老师也不管了. 过程中各种奶,说什么今年一定考仙人掌啦,今年一定考字符串啦,今年一定 ...

  2. CI Weekly #10 | 2017 DevOps 趋势预测

    2016 年的最后几个工作日,我们对 flow.ci Android & iOS 项目做了一些优化与修复: iOS 镜像 cocoapods 版本更新: fir iOS上传插件时间问题修复: ...

  3. 猖獗的假新闻:2017年1月1日起iOS的APP必须使用HTTPS

    一.假新闻如此猖獗 刚才一位老同事 打电话问:我们公司还是用的HTTP,马上就到2017年了,提交AppStore会被拒绝,怎么办? 公司里已经有很多人问过这个问题,回答一下: HTTP还是可以正常提 ...

  4. iOS的ATS配置 - 2017年前ATS规定的适配

    苹果规定 从2017年1月1日起,新提交的 app 不允许使用NSAllowsArbitraryLoads来绕过ATS(全称:App Transport Security)的限制. 以前为了能兼容ht ...

  5. 深入研究Visual studio 2017 RC新特性

    在[Xamarin+Prism开发详解三:Visual studio 2017 RC初体验]中分享了Visual studio 2017RC的大致情况,同时也发现大家对新的Visual Studio很 ...

  6. Xamarin+Prism开发详解三:Visual studio 2017 RC初体验

    Visual studio 2017 RC出来一段时间了,最近有时间就想安装试试,随带分享一下安装使用体验. 1,卸载visual studio 2015 虽然可以同时安装visual studio ...

  7. Microsoft Visual Studio 2017 for Mac Preview 下载+安装+案例Demo

    目录: 0. 前言 1. 在线安装器 2. 安装VS 3. HelloWorld 4. ASP.NET MVC 5. 软件下载 6. 结尾 0. 前言: 工作原因,上下班背着我的雷神,一个月瘦了10斤 ...

  8. Create an offline installation of Visual Studio 2017 RC

    Create an offline installation of Visual Studio 2017 RC ‎2016‎年‎12‎月‎7‎日                             ...

  9. .NET Core 2.0版本预计于2017年春季发布

    英文原文: NET Core 2.0 Planned for Spring 2017 微软项目经理 Immo Landwerth 公布了即将推出的 .NET Core 2.0 版本的细节,该版本预计于 ...

随机推荐

  1. 《神经网络的梯度推导与代码验证》之vanilla RNN的前向传播和反向梯度推导

    在本篇章,我们将专门针对vanilla RNN,也就是所谓的原始RNN这种网络结构进行前向传播介绍和反向梯度推导.更多相关内容请见<神经网络的梯度推导与代码验证>系列介绍. 注意: 本系列 ...

  2. 文本三剑客之grep的用法

    第1章         正则表达式 1.1    正则表达式的介绍               正则是用来过滤文件内容               为处理大量文本|字符串而定义的一套规则和方法.    ...

  3. 剑指 Offer 46. 把数字翻译成字符串

    题目描述 给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 "a" ,1 翻译成 "b",--,11 翻译成 "l",--,25 ...

  4. HashSet保证元素唯一原理以及HashMap扩容机制

    一.HashSet保证元素唯一原理: 依赖于hashCode()和equals()方法1.唯一原理: 1.1 当HashSet集合要存储元素的时候,会调用该元素的hashCode()方法计算哈希值 1 ...

  5. LeetCode.518 零钱兑换Ⅱ(记录)

    518题是背包问题的变体,也称完全背包问题. 解法参考了该篇文章,然后对自己困惑的地方进行记录. 下面是该题的描述: 有一个背包,最大容量为 amount,有一系列物品 coins,每个物品的重量为 ...

  6. oracle之WHERE子句中常用的运算符

    WHERE子句中常用的运算符 4.1 运算符及优先级: 算数运算符*,/,+,-, 逻辑运算符not, and ,or 比较运算符 单行比较运算 =,>, >=,<,<=, & ...

  7. 多图证明,Java到底是值传递还是引用传递?

    开篇先来曝答案,在 Java 语言中,本质只有值传递,而无引用传递,解释和证明详见正文. 说到值传递和引用传递我们不得不提到两个概念:值类型和引用类型. 1.值类型 通俗意义上来说,所谓的值类型指的就 ...

  8. 设计模式 | Catalog设计模式,抵御业务方需求变动

    大家好,这是一个全新的专题--设计模式. 其实可以选择的专题还有好几个,为什么选择设计模式呢?原因也很简单,首先是设计模式简单.易学.干货的文章固然好,但是普适性往往不强.另外一个很重要的点就是设计模 ...

  9. Shell编程(3)

    1. shell流程控制 2. for语句 3. while语句 4. break和continue语句 5. case语句 6. shell编程高级实战 shell流程控制 流程控制是改变程序运行顺 ...

  10. bash运行脚本的几种方式

    转载自https://www.jianshu.com/p/ba6efda13e23 转载地址:http://www.jquerycn.cn/a_8354 bash shell 脚本执行的方法有多种,本 ...