原题地址:P4312 [COCI 2009] OTOCI / 极地旅行社/SP4155 OTOCI - OTOCI

lct入门难度的题,十分弱智(小蒟蒻说lct是什么,能吃吗?)

bridge操作判联通,用find,不同的话link一下

penguins修改点权,把这个点旋转到树根暴力修改并pushup

excursion先判联通,如果联通输出点权之和

操作就是这样,简单有点像P2147 [SDOI2008]洞穴勘测

代码:

#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#define N 300005
using namespace std;
inline int read()
{
int f=1,x=0;char ch;
do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
return f*x;
}
inline void Swap(register int &a,register int &b)
{
a^=b^=a^=b;
}
int n,m,v[N];
struct Link_cut_tree{
int top,c[N][2],fa[N],q[N],rev[N],sum[N];
inline void pushup(register int x)
{
sum[x]=sum[c[x][0]]+sum[c[x][1]]+v[x];
}
inline void pushdown(int x)
{
int l=c[x][0],r=c[x][1];
if(rev[x])
{
rev[l]^=1;
rev[r]^=1;
rev[x]^=1;
Swap(c[x][0],c[x][1]);
}
}
inline bool isroot(int x)
{
return c[fa[x]][0]!=x&&c[fa[x]][1]!=x;
}
inline void rotate(int x)
{
int y=fa[x],z=fa[y],l,r;
if(c[y][0]==x)
l=0;
else
l=1;
r=l^1;
if(!isroot(y))
{
if(c[z][0]==y)
c[z][0]=x;
else
c[z][1]=x;
}
fa[x]=z;
fa[y]=x;
fa[c[x][r]]=y;
c[y][l]=c[x][r];
c[x][r]=y;
pushup(y);
pushup(x);
}
inline void splay(int x)
{
top=1;
q[top]=x;
for(register int i=x;!isroot(i);i=fa[i])
q[++top]=fa[i];
for(register int i=top;i;--i)
pushdown(q[i]);
while(!isroot(x))
{
int y=fa[x],z=fa[y];
if(!isroot(y))
{
if((c[y][0]==x)^(c[z][0]==y))
rotate(x);
else
rotate(y);
}
rotate(x);
}
pushup(x);
}
inline void access(int x)
{
for(register int t=0;x;t=x,x=fa[x])
{
splay(x);
c[x][1]=t;
pushup(x);
}
}
inline void makeroot(int x)
{
access(x);
splay(x);
rev[x]^=1;
}
inline int find(int x)
{
access(x);
splay(x);
while(c[x][0])
x=c[x][0];
return x;
}
inline void split(int x,int y)
{
makeroot(x);
access(y);
splay(y);
}
inline void cut(int x,int y)
{
split(x,y);
if(c[y][0]==x)
{
c[y][0]=0;
fa[x]=0;
}
}
inline void link(int x,int y)
{
makeroot(x);
fa[x]=y;
}
}T;
int main()
{
n=read();
for(register int i=1;i<=n;++i)
{
v[i]=read();
T.sum[i]=v[i];
}
m=read();
while(m--)
{
char c[10];
scanf("%s",c);
int x=read(),y=read();
if(c[0]=='b')
{
if(T.find(x)==T.find(y))
puts("no");
else
{
puts("yes");
T.link(x,y);
}
}
else if(c[0]=='p')
{
T.access(x);
T.splay(x);
v[x]=y;
T.pushup(x);
}
else
{
if(T.find(x)!=T.find(y))
puts("impossible");
else
{
T.split(x,y);
printf("%d\n",T.sum[y]);
}
}
}
return 0;
}

lct真简单

【题解】 Luogu P4312 / SP4155 [COCI 2009] OTOCI / 极地旅行社的更多相关文章

  1. [luogu]P4312 [COCI 2009] OTOCI / 极地旅行社(LCT)

    P4312 [COCI 2009] OTOCI / 极地旅行社 题目描述 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服 ...

  2. 洛谷P4312 [COCI 2009] OTOCI / 极地旅行社(link-cut-tree)

    题目描述 不久之前,Mirko建立了一个旅行社,名叫“极地之梦”.这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走在各个冰岛之间.Mi ...

  3. [洛谷P4312][COCI 2009] OTOCI / 极地旅行社

    题目大意:有$n(n\leqslant3\times10^4)$个点,每个点有点权,$m(m\leqslant3\times10^5)$个操作,操作分三种: $bridge\;x\;y:$询问节点$x ...

  4. P4312 [COCI 2009] OTOCI / 极地旅行社

    思路 LCT维护和的板子 注意findroot的时候要先access一下,修改点权之前要先splay到根 代码 #include <cstdio> #include <algorit ...

  5. BZOJ 1180 [CROATIAN 2009]OTOCI // BZOJ 2843 极地旅行社 // Luogu P4321 [COCI 2009] OTOCI / 极地旅行社 (LCA板题)

    emmm-标题卡着长度上限- LCT板题-(ε=ε=ε=┏(゜ロ゜;)┛) CODE #include <cctype> #include <cmath> #include & ...

  6. bzoj 2223 [Coci 2009]PATULJCI

    [Coci 2009]PATULJCI Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1286  Solved: 553[Submit][Status ...

  7. 【BZOJ-2843&1180】极地旅行社&OTOCI Link-Cut-Tree

    2843: 极地旅行社 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 323  Solved: 218[Submit][Status][Discuss ...

  8. BZOJ_2223_[Coci 2009]PATULJCI_主席树

    BZOJ_2223_[Coci 2009]PATULJCI_主席树 Description Input 10 3 1 2 1 2 1 2 3 2 3 3 8 1 2 1 3 1 4 1 5 2 5 2 ...

  9. [题解] Luogu P5446 [THUPC2018]绿绿和串串

    [题解] Luogu P5446 [THUPC2018]绿绿和串串 ·题目大意 定义一个翻转操作\(f(S_n)\),表示对于一个字符串\(S_n\), 有\(f(S)= \{S_1,S_2,..., ...

随机推荐

  1. 极限树(extraTree)总结

    随机森林:是一个包含多个决策树的分类器, 并且其输出的类别是由个别树输出的类别的众数而定.随机森林对回归的结果在内部是取得平均但是并不是所有的回归都是取的平均,有些是取的和. 随机森林里的随机 极限树 ...

  2. mac nginx compile

    编译 ./configure \ --prefix=/usr/local/services/nginx-1.14.0 \ --with-openssl=/Users/gavin/Downloads/s ...

  3. iOS 开发笔记 - 开发中如何实现自动检测更新APP

    1.获取当前项目APP版本号 2.拿到AppStore项目版本号 3.对比版本号,实现更新功能 直接上代码: #import "ViewController.h" //1一定要先配 ...

  4. hbase-java-api001

    package api; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfig ...

  5. tp 例子=登录逻辑

    <?php namespace Home\Controller; use Think\Controller; class LoginController extends Controller{ ...

  6. 在caffe-ssd安装编译环境运行make all时候报错:Makefile:572: recipe for target '.build_release/src/caffe/util/hdf5.o' failed make: *** [.build_release/src/caffe/util/hdf5.o] Error 1

    解决办法: 修改:Makefile.config INCLUDE_DIRS /usr/include/hdf5/serial/ 修改:Makefile LIBRARIES hdf5_hl and hd ...

  7. [13]Windows 内核情景分析 --- 网络通信

    典型的基于tcpip协议套接字方式的网络通信模块层次: 应用程序 socket api WS2_32.dll socket irp Afd.sys tdi irp Tcpip.sys 回调函数接口 各 ...

  8. Sql 嵌套循环

    DECLARE @i INT ,@j INT BEGIN PRINT 'satrt i:'+CAST(@i AS varchar) BEGIN PRINT 'j:'+CAST(@j AS varcha ...

  9. jQuery事件--keypress([[data],fn])和trigger(type,[data])

    keypress([[data],fn]) 概述 当键盘或按钮被按下时,发生 keypress 事件 keypress 事件与 keydown 事件类似.当按钮被按下时,会发生该事件.它发生在当前获得 ...

  10. Glorious Brilliance (最短路 + 带权二分图匹配)

    这是一道代码大题.一开始读错题意了,然后理解成直接看上去的那种相邻,然后想不通好久!!! 把不同联通的图分离出来,然后先预处理一下形成之后的相邻图的状态,然后根据01确定哪一些是需要更换状态的,然后建 ...