BZOJ 2049 LCT
思路:LCT的基本操作
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 233333
int n,m,xx,yy,rev[N];
char op[11];
struct Tree{int l,r,where,num,fa;}t[N];
void reverse(int k){if(!k)return;rev[k]^=1;swap(t[k].l,t[k].r);}
void pushdown(int k){if(rev[k])reverse(t[k].l),reverse(t[k].r),rev[k]=0;}
void zig(int k){
int f=t[k].fa;pushdown(f),pushdown(k);
if(t[t[f].fa].l==f)t[t[f].fa].l=k;else if(t[t[f].fa].r==f)t[t[f].fa].r=k;
t[k].fa=t[f].fa,t[f].l=t[k].r,t[t[f].l].fa=f,t[k].r=f;t[f].fa=k;}
void zag(int k){
int f=t[k].fa;pushdown(f),pushdown(k);
if(t[t[f].fa].l==f)t[t[f].fa].l=k;else if(t[t[f].fa].r==f)t[t[f].fa].r=k;
t[k].fa=t[f].fa;t[f].r=t[k].l,t[t[f].r].fa=f;t[k].l=f;t[f].fa=k;}
int splay_root(int k){return t[k].fa&&(t[t[k].fa].l==k||t[t[k].fa].r==k);}
void splay(int k){pushdown(k);while(splay_root(k))if(t[t[k].fa].l==k)zig(k);else zag(k);}
int access(int k){int now=0;while(k)splay(k),t[k].r=now,now=k,k=t[k].fa;return now;}
void makeroot(int k){reverse(access(k)),splay(k);}
void link(int k1,int k2){makeroot(k1),t[k1].fa=k2;access(k1);}
void cut(int k1,int k2){makeroot(k1),access(k2),splay(k2),t[k2].l=t[k1].fa=0;}
int findfa(int k){while(t[k].fa)k=t[k].fa;return k;}
int find(int k1,int k2){makeroot(k1);if(findfa(k2)==k1)return 1;return 0;}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%s%d%d",op,&xx,&yy);
if(op[0]=='Q'){
if(find(xx,yy))puts("Yes");
else puts("No");
}
else if(op[0]=='C')link(xx,yy);
else cut(xx,yy);
}
}
BZOJ 2049 LCT的更多相关文章
- BZOJ 2049 & LCT又一模板
题意: 自己看...加边删边问联通... SOL: 就加了一个findroot而已... 然而时间还是惨不忍睹...优化全开也才1700ms...膜seter... Code: /*========= ...
- [BZOJ 2049] [Sdoi2008] Cave 洞穴勘测 【LCT】
题目链接:BZOJ - 2049 题目分析 LCT的基本模型,包括 Link ,Cut 操作和判断两个点是否在同一棵树内. Link(x, y) : Make_Root(x); Splay(x); F ...
- bzoj 2049 [Sdoi2008]Cave 洞穴勘测(LCT)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2049 [题意] 给定森林,可能有连边或断边的操作,回答若干个连通性的询问. [思路] ...
- BZOJ 2049: [Sdoi2008]Cave 洞穴勘測 LCT
入门级LCT: 仅仅有 Cut Link 2049: [Sdoi2008]Cave 洞穴勘測 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 3073 ...
- bzoj 2049: [Sdoi2008]Cave 洞穴勘测 (LCT)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2049 题面: 2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 1 ...
- BZOJ 2049: [Sdoi2008]Cave 洞穴勘测——LCT
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2049 省选之前来切一道数据结构模板题. 题意 这是一道模板题. N个点,M次操作,每次加边/ ...
- BZOJ 2049 SDOI2008 洞穴勘测 LCT板子
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2049 题意概述:给出N个点,一开始不连通,M次操作,删边加边,保证图是一个森林,询问两点连 ...
- bzoj 2049: [Sdoi]Cave 洞穴探测 (LCT)
第一次写lct (这是一道lct裸题 这次没有可爱(划掉)的同学教我,虽然有模板,但是配合网上的讲解还是看不懂QAQ 然后做了几道题之后总算有些感觉辣 于是决定给自己挖个坑,近期写一个lct详解(不过 ...
- BZOJ 2049: [Sdoi2008]Cave 洞穴勘测 LCT
2049: [Sdoi2008]Cave 洞穴勘测 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnli ...
随机推荐
- spark源代码action系列-foreach与foreachPartition
RDD.foreachPartition/foreach的操作 在这个action的操作中: 这两个action主要用于对每一个partition中的iterator时行迭代的处理.通过用户传入的fu ...
- Unity3d修炼之路:用Mesh绘制一个Cube
#pragma strict function Awake(){ var pMeshFilter : MeshFilter = gameObject.AddComponent(typeof(MeshF ...
- WAP 图片 lazyload
原理是根据屏幕上的坐标找到需要做 lazyload 的区域 1,先监听 scroll 事件 ,scrolling_lt window.addEventListener('scroll', functi ...
- nodejs即时聊天
一直想做一个即时聊天的应用,前几天看到了socket.io,感觉还不错.自己略加改动,感觉挺不错的.官网上给的样例非常easy,以下改进了一点,实现了历史消息的推送. demo地址:chat.code ...
- 《UNIX环境高级编程》读书笔记之系统数据文件和信息(1)
1.UNIX系统口令文件包括了下图所看到的的各字段,这些字段包括在<pwd.h>中定义的passwd结构体中 POSIX定义了两个获取口令文件项的函数. 在给出用户登录名或用户ID后.这两 ...
- C++字符串操作笔试题第二波
//1.字符串替换空格:请实现一个函数,把字符串中的每一个空格替换成"%20". //比如输入"we are happy.".则输出"we%20are ...
- MapReduce 程序:WordCount
- 循环访问 TreeView 控件的所有节点
创建测试每个节点的递归过程 . private void PrintRecursive(TreeNode treeNode) { // Print the node. System.Diagnosti ...
- App.config配置详解
经上一篇文章https://www.cnblogs.com/luna-hehe/p/9104701.html发现自己对配置文件很是不了解,同样还是查了半天终于发现另一片宝贵文档https://www. ...
- CentOS_mysql8.0_错误
#参考资料 CSND:https://blog.csdn.net/y_server/article/details/78781177 博客园:http://www.cnblogs.com/testwa ...