【BZOJ 1180】[CROATIAN2009]OTOCI LCT
来源:互联网 发布:兰州ps软件班 编辑:程序博客网 时间:2024/05/18 02:53
第一次只用30分钟写完然后1A有点激动,虽然是一道很裸很傻逼的LCT啦
#include<cstdio>#include<cstring>#include<iostream>#define ls(u) ch[u][0]#define rs(u) ch[u][1]#define maxn 300021using namespace std;int n,m,ch[maxn][2],sum[maxn],q[maxn],flag[maxn],top,fa[maxn],val[maxn];inline int Q(int u){return u==rs(fa[u]);}inline int isrt(int u){return !fa[u]||(u!=ls(fa[u])&&u!=rs(fa[u]));}inline void push_up(int u){sum[u]=sum[ls(u)]+sum[rs(u)]+val[u];}inline void push_down(int u){swap(ls(u),rs(u));flag[u]=0;if(ls(u))flag[ls(u)]^=1;if(rs(u))flag[rs(u)]^=1;}void rotate(int u){int d=!Q(u),f=fa[u];if(!isrt(f))ch[fa[f]][Q(f)]=u;fa[u]=fa[f];if(ch[u][d])fa[ch[u][d]]=f;ch[f][!d]=ch[u][d];fa[f]=u;ch[u][d]=f;push_up(f);push_up(u);}void splay(int u){q[top=1]=u;for(int i=u;!isrt(i);i=fa[i])q[++top]=fa[i];for(int i=top;i>=1;i--)if(flag[q[i]])push_down(q[i]);while(!isrt(u)){if(isrt(fa[u]))rotate(u);else {if(Q(u)==Q(fa[u]))rotate(fa[u]);else rotate(u);rotate(u);}}}void access(int u){for(int x=0;u;u=fa[x=u]){splay(u);rs(u)=x;push_up(u);}}void makert(int u){access(u);splay(u);flag[u]^=1;}void link(int a,int b){makert(a);fa[a]=b;}bool isuni(int a,int b){makert(a);access(b);splay(b);while(ls(b))b=ls(b);return b==a;}void update(int u,int x){access(u);splay(u);val[u]=x;push_up(u);}void query(int a,int b){if(!isuni(a,b))puts("impossible");else printf("%d\n",sum[b]);}int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",val+i);scanf("%d",&m);int a,b;char s[15];while(m--){scanf("%s%d%d",s,&a,&b);if(s[0]=='b'){if(!isuni(a,b))link(a,b),puts("yes");else puts("no");}else if(s[0]=='p'){update(a,b);}else query(a,b);}return 0;}
0 0
- bzoj 1180 [CROATIAN2009]OTOCI - LCT
- 【BZOJ 1180】[CROATIAN2009]OTOCI LCT
- BZOJ 1180: [CROATIAN2009]OTOCI (LCT题解)
- bzoj 1180: [CROATIAN2009]OTOCI
- BZOJ 1180: [CROATIAN2009]OTOCI
- BZOJ 1180: [CROATIAN2009]OTOCI
- 【bzoj1180】【CROATIAN2009】【OTOCI】【lct】
- [BZOJ1180][CROATIAN2009][LCT]OTOCI
- bzoj1180: [CROATIAN2009]OTOCI(lct)
- BZOJ 1180 CROATIAN2009 OTOCI Link-Cut-Tree
- BZOJ 1180: [CROATIAN2009]OTOCI|动态树
- bzoj 1180: [CROATIAN2009]OTOCI link cut tree
- BZOJ 1180 [CROATIAN2009]OTOCI Link Cut Trees
- [BZOJ1180][CROATIAN2009]OTOCI(LCT)
- bzoj1180 [CROATIAN2009]OTOCI(详解LCT操作)
- bzoj 1180 OTOCI LCT 解题报告
- BZOJ 1180 CROATIAN 2009 OTOCI/2843 极地旅行社 LCT
- 【BZOJ 1180】OTOCI【LCT】&【树链剖分+并查集】
- go语言快速入门:流程控制(7)
- iOS中解决后台返回的null导致的崩溃问题
- 1040. 有几个PAT(25)
- 高并发简单解决方案-redis缓存队列+mysql 批量入库+php离线整合
- 【CodeForces】343D Water Tree
- 【BZOJ 1180】[CROATIAN2009]OTOCI LCT
- 10.2 信号处理
- VTK修炼之道48:图形基本操作进阶_符号化操作与模型区率计算
- Redis使用详细教程
- windows下安装lxml
- jquery入门
- Leetcode 109. Convert Sorted List to Binary Search Tree
- python2.7 or not 运算符规则
- PART IV 程序设计层 Chapter 8 高级程序设计语言