BZOJ2049——[Sdoi2008]Cave 洞穴勘测
1、题目大意:就是一个动态维护森林联通性的题
2、分析:lct模板题
#include <stack>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define LL long long
#define eps 1e-7
int n, m;
namespace LinkCutTree{
struct Node{
Node *ch[2], *fa;
bool rev;
Node(){
ch[0] = ch[1] = NULL;
fa = NULL;
rev = false;
}
inline int which(){
if(fa == NULL || (fa -> ch[0] != this && fa -> ch[1] != this)) return -1;
return fa -> ch[1] == this;
}
inline bool reverse(){
if(this) rev ^= 1;
}
inline void pd(){
if(rev){
swap(ch[0], ch[1]);
if(ch[0] != NULL) ch[0] -> reverse();
if(ch[1] != NULL) ch[1] -> reverse();
rev = false;
}
}
} ft[10010], *pos[10010];
inline void rotate(Node *o){
Node *p = o -> fa;
int l = o -> which(), r = l ^ 1;
o -> fa = p -> fa;
if(p -> which() != -1) p -> fa -> ch[p -> which()] = o;
p -> ch[l] = o -> ch[r];
if(o -> ch[r]) o -> ch[r] -> fa = p;
o -> ch[r] = p; p -> fa = o;
}
inline void splay(Node* o){
static stack<Node*> st;
if(!o) return;
Node* p = o;
while(1){
st.push(p);
if(p -> which() == -1) break;
p = p -> fa;
}
while(!st.empty()){
st.top() -> pd(); st.pop();
}
while(o -> which() != -1){
p = o -> fa;
if(p -> which() != -1){
if(p -> which() ^ o -> which()) rotate(o);
else rotate(p);
}
rotate(o);
}
}
inline void Access(Node* o){
Node* p = NULL;
while(o != NULL){
splay(o);
o -> ch[1] = p;
p = o; o = o -> fa;
}
}
inline void MovetoRoot(Node* o){
Access(o);
splay(o);
o -> reverse();
}
inline Node* FindRoot(Node* o){
while(o -> fa != NULL){
o = o -> fa;
}
return o;
}
inline void Link(Node* x, Node* y){
MovetoRoot(x);
x -> fa = y;
}
inline void Cut(Node* x, Node* y){
MovetoRoot(x);
Access(y);
splay(y);
x -> fa = NULL;
y -> ch[0] = NULL;
}
inline void init(){
for(int i = 1; i <= n; i ++) pos[i] = &ft[i];
}
inline void Connect(int u, int v){
Link(pos[u], pos[v]);
}
inline void Destroy(int u, int v){
Cut(pos[u], pos[v]);
}
inline bool Query(int u, int v){
return FindRoot(pos[u]) == FindRoot(pos[v]);
}
}
int main(){
char op[10];
int u, v;
scanf("%d%d", &n, &m);
LinkCutTree::init();
for(int i = 1; i <= m; i ++){
scanf("%s", op);
scanf("%d%d", &u, &v);
if(op[0] == 'C') LinkCutTree::Connect(u, v);
else if(op[0] == 'D') LinkCutTree::Destroy(u, v);
else puts(LinkCutTree::Query(u, v) ? "Yes" : "No");
}
return 0;
}
BZOJ2049——[Sdoi2008]Cave 洞穴勘测的更多相关文章
- BZOJ2049 SDOI2008 Cave 洞穴勘测 【LCT】
BZOJ2049 SDOI2008 Cave 洞穴勘测 Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分 ...
- 【LCT】BZOJ2049 [SDOI2008]Cave 洞穴勘测
2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 10059 Solved: 4863[Submit ...
- [BZOJ2049][Sdoi2008]Cave 洞穴勘测 LCT模板
2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 9705 Solved: 4674[Submit] ...
- [bzoj2049][Sdoi2008]Cave 洞穴勘测_LCT
Cave 洞穴勘测 bzoj-2049 Sdoi-2008 题目大意:维护一个数据结构,支持森林中加边,删边,求两点连通性.n个点,m个操作. 注释:$1\le n\le 10^4$,$1\le m\ ...
- [BZOJ2049] [SDOI2008] Cave 洞穴勘测 (LCT)
Description 辉辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好 ...
- BZOJ2049: [Sdoi2008]Cave 洞穴勘测 Link-Cut-Tree 模板题
传送门 搞了这么长时间Splay终于可以搞LCT了,等等,什么是LCT? $LCT$就是$Link-Cut-Tree$,是维护动态树的一个很高效的数据结构,每次修改和查询的均摊复杂度为$O(logN) ...
- bzoj2049: [Sdoi2008]Cave 洞穴勘测
lct入门题? 得换根了吧TAT 这大概不是很成熟的版本.. #include<iostream> #include<cstring> #include<cstdlib& ...
- bzoj2049 [Sdoi2008]Cave 洞穴勘测 link cut tree入门
link cut tree入门题 首先说明本人只会写自底向上的数组版(都说了不写指针.不写自顶向下QAQ……) 突然发现link cut tree不难写... 说一下各个函数作用: bool isro ...
- bzoj2049: [Sdoi2008]Cave 洞穴勘测 lct裸题
题意:三种操作一种摧毁一条边,一种链接一条边,一种查询两个点是否联通 题解:lct的link和cut即可 /********************************************** ...
随机推荐
- 加载信息,先从数据库取出5条实现分页,鼠标向上滑动触发Ajax再加载5条,达到异步刷新,优化加载。。。
php数据库取数据 <?php include("conn1.php"); include('../function/functions.php'); $page=intva ...
- 以全局监听的方式处理img的error事件
http://www.ovaldi.org/2015/09/11/%E4%BB%A5%E5%85%A8%E5%B1%80%E7%9B%91%E5%90%AC%E7%9A%84%E6%96%B9%E5% ...
- int main(int argc, char * argv[]) 里的异常处理
#import <UIKit/UIKit.h> #import "AppDelegate.h" int main(int argc, char * argv[]) { ...
- Docker Dockerfile详解
http://blog.csdn.net/wsscy2004/article/details/25878223 如何使用 Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等 ...
- validate jquery 注册页面使用实例 详解
官方使用文档:http://jqueryvalidation.org/documentation/ 参考资料:http://www.w3cschool.cc/jquery/jquery-plugin- ...
- PHP任意文件包含绕过截断新姿势
前言 此方法是@l3m0n叔叔给我分享的,原文已经发布在90sec 我没有90sec的账号,所以自己实践一下,顺道安利给访问我博客的小伙伴. 适用情况 可以控制协议的情况下,如果%00无法截断包含,可 ...
- 安装 SQL server 2008 R2
操作系统:WIN7 问题: The Windows Installer Service could not be accessed. This can occur if the Windows Ins ...
- [webgrid] – header - (How to Add custom html to Header in WebGrid)
How to Add custom html to Header in WebGrid MyEvernote Link Posted on March 30, 2013by mtryambake Ho ...
- Spring4学习笔记-AOP
1.加入jar包 com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEAS ...
- SignalR 资料
链接:http://www.cnblogs.com/royding/p/3919134.html