BZOJ3082: Graph2
LCT维护边被删除的时间的最大生成树,删边时若不在MST上则无视。
#include<bits/stdc++.h>
using namespace std;
const int N=250005;
int n,m,q,l1;
struct edge{int u,v,t;}c[N];
struct info{char c;int u,v;}f[N];
struct vec{
int u,v;
vec(int u=1e9,int v=0):u(u),v(v){}
};
bool operator<(vec a,vec b){
return a.u<b.u;
}
struct node;
typedef node*ptr;
struct node{
ptr i,j,p;
bool r;
vec v,s;
node();
ptr up(){
s=min(min(v,i->s),j->s);
return this;
}
void down(){
if(r)
i->r^=1,j->r^=1,swap(i,j),r=0;
}
}e[N];
node::node(){i=j=p=e;}
bool root(ptr o){return o!=o->p->i&&o!=o->p->j;}
void turn(ptr o){
ptr s=o->p,t=s->p;
if(!root(s))(s==t->i?t->i:t->j)=o;
s->p=o,o->p=t;
if(o==s->i)
s->i=o->j,o->j->p=s,o->j=s->up();
else
s->j=o->i,o->i->p=s,o->i=s->up();
}
void push(ptr o){
if(!root(o))push(o->p);
o->down();
}
ptr splay(ptr o){
push(o);
while(!root(o)){
if(!root(o->p))turn(o==o->p->i^o->p==o->p->p->i?o:o->p);
turn(o);
}
return o->up();
}
ptr exp(ptr o){
ptr s=e;
while(o!=e)splay(o)->j=s,s=o->up(),o=o->p;
return s;
}
void link(int i,int j){
exp(e+i)->r=1,splay(e+i)->p=e+j;
}
void cut(int i,int j){
ptr s=e+i,t=e+j;
exp(s)->r=1,exp(t);
if(s==t->i&&s->j==e)t->i=s->p=e;
if(t==s->j&&t->i==e)s->j=t->p=e;
}
bool jud(int i,int j){
exp(e+i)->r=1;
ptr o=exp(e+j);
while(o->i!=e)o=o->i,o->down();
return splay(o)==e+i;
}
void ins(int i){
if(c[i].u==c[i].v)return;
int&v=c[i].t;
if(!v)v=q+1;
e[n+i].v=vec(v,i);
if(!jud(c[i].u,c[i].v)){
link(c[i].u,n+i);
link(c[i].v,n+i);
}else{
int j=e[c[i].u].s.v;
if(c[i].t>c[j].t){
cut(c[j].u,n+j);
cut(c[j].v,n+j);
link(c[i].u,n+i);
link(c[i].v,n+i);
}
}
}
void del(int i){
cut(c[i].u,n+i);
cut(c[i].v,n+i);
}
int main(){
scanf("%d%d",&n,&m);
l1=m;
for(int i=1;i<=m;++i)
scanf("%d%d",&c[i].u,&c[i].v);
scanf("%d",&q);
for(int i=1;i<=q;++i){
scanf(" %c%d",&f[i].c,&f[i].u);
if(f[i].c=='D'){
int&v=c[f[i].u].t;
if(!v)v=i;
}else{
scanf("%d",&f[i].v);
if(f[i].c=='I')
c[++l1]=(edge){f[i].u,f[i].v};
}
}
for(int i=1;i<=m;++i)
ins(i);
l1=m;
for(int i=1;i<=q;++i){
if(f[i].c=='D')del(f[i].u);
if(f[i].c=='I')ins(++l1);
if(f[i].c=='Q')
puts(jud(f[i].u,f[i].v)?"Yes":"No");
}
}
BZOJ3082: Graph2的更多相关文章
- 带权图的最短路径算法(Dijkstra)实现
一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...
- poj2612Mine Sweeper
很简单的模拟题目,但在队内赛的时候一直WA了10发...我ca 题目没看懂,也不算,就是我以为摸到地雷他会标星(*) ,但其实还是(x),T_T #include <cstdio> #in ...
- Jena TDB assembler syntax
1 introduction Assembler is a DSL of Jena to specify something to build, models and dataset, for exa ...
- SparkGraphXTest.scala
/** * Created by root on 9/8/15. */ import org.apache.spark._ import org.apache.spark.graphx._ impor ...
- CSS 实现三角形、梯形、等腰梯形
三角形 ; width: 0px; border-width: 0px 30px 45px 145px; border-style: none solid solid; border-color: t ...
- jsPlumb之流程图项目总结及实例
在使用jsPlumb过程中,所遇到的问题,以及解决方案,文中引用了<数据结构与算法JavaScript描述>的相关图片和一部分代码.截图是有点多,有时比较懒,没有太多的时间去详细的编辑. ...
- 【最短路+最大流】上学路线@安徽OI2006
目录 [最短路+最大流]上学路线@安徽OI2006 PROBLEM SOLUTION CODE [最短路+最大流]上学路线@安徽OI2006 PROBLEM 洛谷P4300 SOLUTION 先在原图 ...
- c++第三次实验
第一题: 先把代码贴上来 main.cpp #include <iostream> #include <cstdlib> #include<conio.h> #in ...
- C++实验三
part2 graph.h #ifndef GRAPH_H#define GRAPH_H// 类Graph的声明 class Graph { public: Graph(char ch, int n) ...
随机推荐
- Service之来电监听(失败的案例)
Service:服务,可以理解成一个运行再后台没有界面的Activity,集成于Seriver,是四大组件之一 Service的继承关系:Service-->ContextWrapper--&g ...
- [转]7个高性能JavaScript代码高亮插件
对于喜欢写技术博客的同学来说,一定对代码高亮组件非常熟悉.一款优秀的JavaScript代码高亮插件,将会帮助你渲染任何一种编程语言,包括一些关键字的着色,以及每行代码的缩进等.今天我们要来分享一些高 ...
- 把时间转成适合符合日常习惯的格式【js】
假设现在是7月30日12点,我们可以说今天12点,意思也非常明确. 我们习惯说昨天12点,而不习惯说29号12点. 我们习惯说周一12点,而不习惯说28号12点,这样不用翻日历看今天是几号. so,上 ...
- 作业成绩 final-review 20161201-1203 15:05
final-review阶段,20161201-20161203 15:05 final 评论II截止 20161204 09:00 申诉截止时间 20161207 12:00,微信联系杨贵福. 凡描 ...
- 揭秘PHP匿名函数
揭秘PHP匿名函数 定义:匿名函数就是没有名字的函数. 有2种形式的匿名函数: 形式1:将一个匿名函数"赋值"给一个变量--此时该变量就代表该匿名函数了! 形式2: 是直接将一个匿 ...
- MySql数据类型问题
1. mysql时间函数 DATE_ADD(now(), INTERVAL 1 DAY) AS tomorrow DATE_SUB(now(), INTERVAL 1 DAY) AS yesterda ...
- Eclipse导入 appcompat,design兼容包
从Android studio推出1.0正式版后,就一直在as上开发项目,但是最近要测试一个项目,是eclipse结构,导入as后,是各种报错信息,决定改成eclipse. 其中项目中用到了ppcom ...
- C++折半插入排序
代码如下: #include <iostream> using namespace std; void insertSort(int a[], int n) { for(int i=1;i ...
- win7如何让局域网其他电脑通过IP直接访问自己电脑的网站
一.打开控制面板 二.打开防火墙 三.点击右侧高级设置 四.点击防火墙属性 五.点击防火墙状态选择为关闭,确定 六.点击右侧允许或功能通过windows防火墙 七.执行第六部会打开防火墙通信例外窗口, ...
- U盘常见问题汇总
优盘常见问题,持续更新.大家有什么问题可以留言,一起解决,谢谢. 1.优盘中的文件全部变成快捷方式解决办法 打开优盘,查找updat.vbs文件脚本,此文件脚本为病毒脚本,若找不到文件脚本则开启隐藏文 ...