BZOJ 1180: [CROATIAN2009]OTOCI (LCT题解)
来源:互联网 发布:怎么安装发票软件 编辑:程序博客网 时间:2024/05/29 13:36
Time Limit: 50 Sec Memory Limit: 162 MB
Submit: 1129 Solved: 696
Description
给出n个结点以及每个点初始时对应的权值wi。起始时点与点之间没有连边。有3类操作: 1、bridge A B:询问结点A与结点B是否连通。如果是则输出“no”。否则输出“yes”,并且在结点A和结点B之间连一条无向边。 2、penguins A X:将结点A对应的权值wA修改为X。 3、excursion A B:如果结点A和结点B不连通,则输出“impossible”。否则输出结点A到结点B的路径上的点对应的权值的和。给出q个操作,要求在线处理所有操作。数据范围:1<=n<=30000, 1<=q<=300000, 0<=wi<=1000。
Input
第一行包含一个整数n(1<=n<=30000),表示节点的数目。第二行包含n个整数,第i个整数表示第i个节点初始时对应的权值。第三行包含一个整数q(1<=n<=300000),表示操作的数目。以下q行,每行包含一个操作,操作的类别见题目描述。任意时刻每个节点对应的权值都是1Output
输出所有bridge操作和excursion操作对应的输出,每个一行。
作对应的输出,每个一行。
Sample Input
5
4 2 4 5 6
10
excursion 1 1
excursion 1 2
bridge 1 2
excursion 1 2
bridge 3 4
bridge 3 5
excursion 4 5
b
Sample Output
4
impossible
yes
6
yes
yes
15
yes
15
16excursion 2 5
yes
15
yes
15
16
LCT裸题,需要看LCT讲解的请参考我的讲解博客
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<vector>#include<map>#include<set>const int MAXN=300000+1000;using namespace std;int readin(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9')ch=getchar(); while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}struct Tree{ int val,sum,rev,fa,child[2];}tree[MAXN];int n,m;bool isroot(int x){ return tree[tree[x].fa].child[0]!=x&&tree[tree[x].fa].child[1]!=x;}void pushdown(int x){ if(tree[x].rev){ tree[x].rev^=1;tree[tree[x].child[0]].rev^=1;tree[tree[x].child[1]].rev^=1; swap(tree[x].child[0],tree[x].child[1]); }}void Pushdown(int x){ if(!isroot(x))Pushdown(tree[x].fa); pushdown(x);}void pushup(int x){ tree[x].sum=tree[tree[x].child[0]].sum+tree[tree[x].child[1]].sum+tree[x].val;}void rotate(int x){ int y=tree[x].fa,z=tree[y].fa,l,r; if(tree[y].child[0]==x) l=0;else l=1;r=l^1; if(!isroot(y)){ if(tree[z].child[0]==y) tree[z].child[0]=x; else tree[z].child[1]=x; } tree[x].fa=z;tree[tree[x].child[r]].fa=y;tree[y].fa=x;tree[y].child[l]=tree[x].child[r];tree[x].child[r]=y; pushup(y);pushup(x);}void splay(int x){ Pushdown(x); while(!isroot(x)){ int y=tree[x].fa,z=tree[y].fa; if(!isroot(y)){ if(tree[z].child[0]==y^tree[y].child[0]==x) rotate(x); else rotate(y); } rotate(x); }}void access(int x){ for(register int i=0;x;i=x,x=tree[x].fa){ splay(x);tree[x].child[1]=i;pushup(x); }}int findroot(int x){ access(x);splay(x); while(tree[x].child[0])x=tree[x].child[0]; return x;}bool link(int x,int y){ if(findroot(x)==findroot(y)) return false; access(x);splay(x);tree[x].rev^=1;tree[x].fa=y; return true;}int main(){ //freopen(".txt","r",stdin); //freopen(".out","w",stdout); n=readin(); for(register int i=1;i<=n;i++)scanf("%d",&tree[i].val),tree[i].sum=tree[i].val; m=readin(); char ch[10]; int xx,yy; while(m--){ scanf("%s",&ch); if(ch[0]=='b'){ scanf("%d%d",&xx,&yy); if(link(xx,yy)) printf("yes\n"); else printf("no\n"); }else if(ch[0]=='p'){ scanf("%d%d",&xx,&yy); access(xx);splay(xx);tree[xx].val=yy;pushup(xx); }else{ scanf("%d%d",&xx,&yy); if(findroot(xx)!=findroot(yy))printf("impossible\n"); else{ access(xx);splay(xx);tree[xx].rev^=1;access(yy);splay(yy); printf("%d\n",tree[yy].sum); } } } return 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]OTOCI(详解LCT操作)
- 【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
- bzoj 1180 OTOCI LCT 解题报告
- BZOJ 1180 CROATIAN 2009 OTOCI/2843 极地旅行社 LCT
- 【BZOJ 1180】OTOCI【LCT】&【树链剖分+并查集】
- 生产者和消费者
- 棋盘(Checkerboard)算法
- C++之宁以pass-by-reference-to-const替换pass-by-value(20)---《Effecitive C++》
- tensorflow使用遇到的问题The TensorFlow library wasn't compiled to use SSE instructions, but these are avail
- 49. Group Anagrams
- BZOJ 1180: [CROATIAN2009]OTOCI (LCT题解)
- 第10节-Linux文件系统与目录树得关系
- CSS属性之浮动flow
- CTF中常用的zio模块笔记
- hibernate配置文件
- visual studio 使用C#语言进行MDI窗体创建
- G
- [水文]生成模型2
- 第11节-Linux EXT2/EXT3 文件的存取与日志式文件系统的功能