bzoj4229: 选择
Description
Input
Output
#include<cstdio>
#include<algorithm>
const int N=,M=;
char buf[M+],*ptr=buf-;
inline int _int(){
int x=,c=*++ptr;
while(c>||c<)c=*++ptr;
while(c>&&c<)x=x*+c-,c=*++ptr;
return x;
}
inline int getop(){
int c=*++ptr;
while(c<'A'||c>'Z')c=*++ptr;
return c;
}
struct edge{int a,b;}e[];
bool operator<(edge a,edge b){
return a.a!=b.a?a.a<b.a:a.b<b.b;
}
int n,m,q;
int qs[N][];
bool ans[N];
int del[N];
int es[N*],enx[N*],e0[N],ep=,f[N],F[N],F1[N],dep[N],fa[N];
int ed[N*];
int dfn[N],low[N],T=;
int get(int x){
int a=x,c;
while(x!=f[x])x=f[x];
while(x!=(c=f[a]))f[a]=x,a=c;
return x;
}
int Get(int x){
int a=x,c;
while(x!=F[x])x=F[x];
while(x!=(c=F[a]))F[a]=x,a=c;
return x;
}
void swap(int&a,int&b){int c=a;a=b;b=c;}
void tj(int w){
dfn[w]=low[w]=++T;
for(int i=e0[w];i;i=enx[i]){
int u=es[i];
if(ed[i]){
if(ed[i]==&&!dfn[u]){
dep[u]=dep[w]+;
fa[u]=w;
tj(u);
}
continue;
}
if(!dfn[u]){
ed[i^]=;
dep[u]=dep[w]+;
fa[u]=w;
tj(u);
if(low[u]<low[w])low[w]=low[u];
if(low[u]<=dfn[w])f[get(u)]=get(w);
}else if(dfn[u]<low[w])low[w]=dfn[u];
}
}
int main(){
fread(buf,,M,stdin);
n=_int();m=_int();q=_int();
for(int i=;i<m;i++){
int a=_int(),b=_int();
if(a>b){int c=a;a=b;b=c;}
e[i]=(edge){a,b};
}
std::sort(e,e+m);
for(int i=;i<=q;i++){
qs[i][]=(getop()=='Z');
int a=qs[i][]=_int();
int b=qs[i][]=_int();
if(qs[i][]){
if(a>b)swap(a,b);
edge w=(edge){a,b};
++del[std::lower_bound(e,e+m,w)-e];
}
}
for(int i=;i<=n;i++)F[i]=f[i]=i;
for(int i=;i<m;i++){
if(del[i]>)for(int j=,c=del[i];j<c;j++)del[i+j]=;
if(del[i])continue;
int a=e[i].a,b=e[i].b;
es[ep]=b;enx[ep]=e0[a];e0[a]=ep++;
es[ep]=a;enx[ep]=e0[b];e0[b]=ep++;
F[Get(a)]=Get(b);
}
for(int i=;i<=n;i++)F1[i]=F[i];
for(int i=q;i;i--)if(qs[i][]){
int a=qs[i][],b=qs[i][];
if(Get(a)==Get(b))continue;
ed[ep]=;es[ep]=b;enx[ep]=e0[a];e0[a]=ep++;
ed[ep]=;es[ep]=a;enx[ep]=e0[b];e0[b]=ep++;
F[Get(a)]=Get(b);
}
for(int i=;i<=n;i++)if(!dfn[i])tj(i);
for(int i=;i<=n;i++)F[i]=F1[i];
for(int i=q;i;i--){
int a=qs[i][],b=qs[i][];
if(qs[i][]){
if(Get(a)!=Get(b)){
if(dep[a]<dep[b])swap(a,b);
fa[a]=b;
F[Get(a)]=Get(b);
continue;
}
a=get(a);b=get(b);
while(a!=b){
if(dep[a]<dep[b])swap(a,b);
f[a]=get(fa[a]);
a=fa[a];
}
}else ans[i]=(get(a)==get(b));
}
for(int i=;i<=q;i++)if(!qs[i][])puts(ans[i]?"Yes":"No");
return ;
}
bzoj4229: 选择的更多相关文章
- BZOJ4229选择——LCT+并查集+离线(LCT动态维护边双连通分量)
题目描述 现在,我想知道自己是否还有选择. 给定n个点m条边的无向图以及顺序发生的q个事件. 每个事件都属于下面两种之一: 1.删除某一条图上仍存在的边 2.询问是否存在两条边不相交的路径可以从点u出 ...
- 【bzoj4229】选择 离线+LCT
题目描述 现在,我想知道自己是否还有选择. 给定n个点m条边的无向图以及顺序发生的q个事件. 每个事件都属于下面两种之一: 1.删除某一条图上仍存在的边 2.询问是否存在两条边不相交的路径可以从点u出 ...
- Atitit 项目语言的选择 java c#.net php??
Atitit 项目语言的选择 java c#.net php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...
- 逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])
常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列 ...
- 如何选择PHP框架?
PHP是世界上最受欢迎的编程语言之—.最近发布的PHP7令这种服务器的编程语言比以前变得更好,更稳定了. PHP被广泛应用于重大的项目.例如Facebook就是使用PHP来维护和创建它们的内部系统的. ...
- CoreCRM 开发实录——开始之新项目的技术选择
2016年11月,接受了一个工作,是对"悟空CRM"进行一些修补.这是一个不错的 CRM,开源,并提供一个 SaaS 的服务.正好微软的 .NET Core 和 ASP.NET C ...
- angular2系列教程(九)Jsonp、URLSearchParams、中断选择数据流
大家好,今天我们要讲的是http模块的第二部分,主要学习ng2中Jsonp.URLSearchParams.observable中断选择数据流的用法. 例子
- 算法与数据结构(十三) 冒泡排序、插入排序、希尔排序、选择排序(Swift3.0版)
本篇博客中的代码实现依然采用Swift3.0来实现.在前几篇博客连续的介绍了关于查找的相关内容, 大约包括线性数据结构的顺序查找.折半查找.插值查找.Fibonacci查找,还包括数结构的二叉排序树以 ...
- Mysql存储引擎及选择方法
0x00 Mysql数据库常用存储引擎 Mysql数据库是一款开源的数据库,支持多种存储引擎的选择,比如目前最常用的存储引擎有:MyISAM,InnoDB,Memory等. MyISAM存储引擎 My ...
随机推荐
- (实用篇)PHP实现队列及队列原理
队列是一种线性表,按照先进先出的原则进行的: PHP实现队列:第一个元素作为队头,最后一个元素作为队尾 <?php /** * 队列就是这么简单 * * @link */ $array = ar ...
- 三分钟了解Activity工作流
一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑 采用工作 ...
- yii2数据修改|联查
model 层 联查 $con = Yii::$app->db; $re = $con->createCommand("select * from ads LEFT JOIN ...
- Scrum第一天任务认领情况
在团队项目“广商百货”的SCRUM项目中我认领的任务是对登录注册界面进行完善.具体功能还没有实现,还在学习中...
- 原生js获取鼠标坐标方法全面讲解:clientX/Y,pageX/Y,offsetX/Y,layerX/Y,screenX/Y【转】
关于js鼠标事件综合各大浏览器能获取到坐标的属性总共以下五种 event.clientX/Y event.pageX/Y event.offsetX/Y event.layerX/Y event.sc ...
- 关于HTML的Element
今天搞HTML的时候,发现了一些操作element的方法.先引用一篇. 1.document.getElementById(id); 2.document.getElementByTagName(t ...
- CentOS搭建Httpd Pyhton3 Django环境
系统环境 centos-6-x86 系统自带httpd 编译安装Python3 pip3 参考 http://www.cnblogs.com/vawter/p/6254170.html 编译安装wsg ...
- 越狱Season 1-Episode 11: And Then There Were 7-M
Season 1, Episode 11: And Then There Were 7-M -Michael: That one 那个 -businessman: Nice choice choice ...
- HTML中特殊字符和与之对应的ASCII代码
ASCII代码是说明了在html中每个特殊字符的属性以及字符的简要说明.在使用html时,如何把ASCII代码添加到网页中.例如版权符号'©'在html中可以通过 "©"来显示. ...
- JPA的Column注解总结
就像@Table注解用来标识实体类与数据表的对应关系类似,@Column注解来标识实体类中属性与数据表中字段的对应关系. 该注解的定义如下: @Target({METHOD, FIELD}) @Ret ...