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 ...
随机推荐
- hdu 5207
题目大意:给定一组数,取两个数,使得gcd最大.分析:先nlogn预处理出105所有数的因子,然后用cnt数组计数给定数的因子个数,再找到最大的i,满足cnt[i]>=2,复杂度为nlogn.学 ...
- Codeforces Round #372 (Div. 2)
Codeforces Round #372 (Div. 2) C. Plus and Square Root 题意 一个游戏中,有一个数字\(x\),当前游戏等级为\(k\),有两种操作: '+'按钮 ...
- php文件遍历
<?php $dirname="shangchuan/uploads"; echo $dirname."共计大小为:".toSize(dirsize($d ...
- P364 实战练习(多线程)
尝试定义一个继承Thread类的类,并覆盖run( )方法,在run( )方法中每隔1000毫秒打印一句话. 编写代码如下: 编写PractiseThread类: package org.hanqi. ...
- NOSQL Benchmarks
www.planetcassandra.org/nosql-performance-benchmarks/ http://www.planetcassandra.org/nosql-performan ...
- C#配置升级
void ConvertProject() { List<BaseProjectConverter> convertors = new List<BaseProjectConvert ...
- int(M)与int
int(M) ,加上zerofill后M才表现出有点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10 ...
- ECLIPSE中添加TPTP插件
转自:http://blog.csdn.net/sinboy/article/details/1536625 程序在实际应用当中,大数据量时对系统本身的影响是一个不得不面对的问题. 最早在使用Jbui ...
- easyUI之Combo
Combo组件为自定义下拉列表组件,无class的加载方式,主要是通过jquery的方式.它依赖于validatebox,可以用它的很多属性.例如: 前台: <div id="box& ...
- EDIUS工程里面的素材保存方法
在实际使用EDIUS剪辑一段视频时,会有好多人问这样一个问题:EDIUS工程里面使用的素材不能自动复制到工程文件夹里面吗,难道要自己一个一个复制进去?面对这样的疑问,来看看小编是如何做的吧. 为了用户 ...