博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2049 [Sdoi2008]Cave 洞穴勘测 ——Link-Cut Tree
阅读量:5805 次
发布时间:2019-06-18

本文共 1803 字,大约阅读时间需要 6 分钟。

【题目分析】

    LCT另一道题目,很裸,许多操作都不需要,写起来很爽。

【代码】

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define maxn 1000005#define inf (0x3f3f3f3f) int read(){ int x=0,f=1; char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();} while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*f;} int fa[maxn],ch[maxn][2],n,m,rev[maxn],sta[maxn],top; bool isroot(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;} void pushdown (int x){ if (rev[x]) { rev[x]^=1; rev[ch[x][0]]^=1; rev[ch[x][1]]^=1; swap(ch[x][0],ch[x][1]); }} void rot(int x){ int y=fa[x],z=fa[y],l,r; if (ch[y][0]==x) l=0; else l=1; r=l^1; if (!isroot(y)) { if (ch[z][0]==y) ch[z][0]=x; else ch[z][1]=x; } fa[x]=z; fa[y]=x; fa[ch[x][r]]=y; ch[y][l]=ch[x][r]; ch[x][r]=y;} void splay(int x){ top=0; sta[++top]=x; for (int i=x;!isroot(i);i=fa[i]) sta[++top]=fa[i]; while (top) pushdown(sta[top--]); while (!isroot(x)) { int y=fa[x],z=fa[y]; if (!isroot(y)) { if (ch[y][0]==x^ch[z][0]==y) rot(y); else rot(x); } rot(x); }} void access(int x){for (int t=0;x;t=x,x=fa[x]) splay(x),ch[x][1]=t;} void makeroot(int x){ access(x); splay(x); rev[x]^=1;} void cut(int x,int y){ makeroot(x); access(y); splay(y); ch[y][0]=fa[x]=0;} void link(int x,int y){ makeroot(x); fa[x]=y;} int find(int x){ access(x); splay(x); while (ch[x][0]) x=ch[x][0]; return x;} int main(){ n=read();m=read(); while (m--) { char opt[11]; int x,y; scanf("%s",opt+1); x=read(); y=read(); if (opt[1]=='Q') { if (find(x)==find(y)) printf("Yes\n"); else printf("No\n"); } else if (opt[1]=='C') link(x,y); else cut(x,y); }}

  

转载于:https://www.cnblogs.com/SfailSth/p/6195062.html

你可能感兴趣的文章
混合云管理-企业如何选择混合云管理平台
查看>>
基于Spark的机器学习实践 (十) - 降维
查看>>
苹果的破局几招:修漏洞、降价、官方认证翻新机…… ...
查看>>
SLS机器学习介绍(04):规则模式挖掘
查看>>
Android中ExpandableListView中嵌套ListView
查看>>
docker学习系列9 Docker的技术原理介绍
查看>>
Spring Batch 介绍
查看>>
StringBuffer的解读(二)
查看>>
以太坊行情预测 kinmall:以太币能否带来新一轮的牛市?
查看>>
linux vsftpd 配置 常用
查看>>
一文告诉你SD-WAN与MPLS的区别在哪里?
查看>>
如何用 RocketMQ 打造金融级消息服务平台?微众银行这么做
查看>>
Android 升级数据库的最佳写法
查看>>
真的来了!首批科创板IPO受理企业名单出炉
查看>>
Python 编程语言实行尽可能成熟、稳定的新管理模式
查看>>
Bootstrap中datetimepicker日期控件1899年问题解决
查看>>
Dubbo Metrics 发布新版本 2.0.1 | Dubbo 的度量统计基础设施
查看>>
第四篇:SpringBoot 2.x整合MyBatis
查看>>
Visual Studio安装SVN插件
查看>>
JS如何模拟鼠标点击X,Y坐标
查看>>