【BZOJ 1180】 (LCT)
1180: [CROATIAN2009]OTOCI
Time Limit: 50 Sec Memory Limit: 162 MB
Submit: 1078 Solved: 662Description
给出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行,每行包含一个操作,操作的类别见题目描述。任意时刻每个节点对应的权值都是1到1000的整数。
Output
输出所有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
bridge 1 3
excursion 2 4
excursion 2 5Sample Output
4
impossible
yes
6
yes
yes
15
yes
15
16HINT
Source
【分析】
LCT裸题。。
没有cut操作。。
嗯。。。还是要调试啊。。。
注意LCT是维护链的,,询问路径对LCT来说就是小菜一碟。。
不过之前维护子树的那题用LCT变成路径维护的感觉很强啊。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define Maxn 30010 struct node
{
int son[],fa,w,sm;
bool rev;
node() {son[]=son[]=fa=w=sm=rev=;}
}tr[Maxn]; int q[Maxn],ql;
struct LCT
{
void upd(int x)
{
int lc=tr[x].son[],rc=tr[x].son[];
tr[x].sm=tr[lc].sm+tr[rc].sm+tr[x].w;
}
void push_down(int x)
{
int lc=tr[x].son[],rc=tr[x].son[];
if(tr[x].rev)
{
swap(tr[x].son[],tr[x].son[]);
tr[lc].rev^=;tr[rc].rev^=;
tr[x].rev=;
}
}
bool is_root(int x)
{
return tr[tr[x].fa].son[]!=x&&tr[tr[x].fa].son[]!=x;
}
void rot(int x)
{
int fa=tr[x].fa,yy=tr[fa].fa;
int w=tr[fa].son[]==x?:; if(!is_root(fa))
{
if(tr[yy].son[]==fa) tr[yy].son[]=x;
else tr[yy].son[]=x;
}tr[x].fa=yy; tr[tr[x].son[w]].fa=fa;
tr[fa].son[-w]=tr[x].son[w]; tr[x].son[w]=fa;
tr[fa].fa=x;
upd(fa);//upd(x);
}
void pre(int x)
{
ql=;
while(!is_root(x)) q[++ql]=x,x=tr[x].fa;
q[++ql]=x;
while(ql) push_down(q[ql--]);
}
void splay(int x)
{
pre(x);
while(!is_root(x))
{
int fa=tr[x].fa,yy=tr[fa].fa;
if(!is_root(fa))
{
if((tr[yy].son[]==fa)==(tr[fa].son[]==x)) rot(fa);
else rot(x);
}
rot(x);
}upd(x);
}
void access(int x)
{
int lt=;
while(x)
{
splay(x);
tr[x].son[]=lt;
upd(x);
lt=x;
x=tr[x].fa;
}
}
void make_root(int x)
{
access(x);
splay(x);
tr[x].rev^=;
}
void split(int x,int y)
{
make_root(x);
access(y);
splay(y);
}
int find_root(int x)
{
access(x);
splay(x);
while(tr[x].son[]) x=tr[x].son[];
return x;
}
bool cn(int x,int y)
{
return find_root(x)==find_root(y);
}
void link(int x,int y)
{
make_root(x);
tr[x].fa=y;
}
}LCT; char s[]; int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int x;
scanf("%d",&x);
tr[i].w=x;LCT.upd(x);
}
int q;
scanf("%d",&q);
while(q--)
{
int x,y;
scanf("%s%d%d",s,&x,&y);
if(s[]=='e')
{
if(!LCT.cn(x,y)) printf("impossible\n");
else
{
LCT.split(x,y);
printf("%d\n",tr[y].sm);
}
}
else if(s[]=='b')
{
if(!LCT.cn(x,y)) {printf("yes\n");LCT.link(x,y);}
else printf("no\n");
}
else
{
LCT.splay(x);
tr[x].w=y;LCT.upd(x);
}
}
return ;
}
2017-04-27 10:50:31
【BZOJ 1180】 (LCT)的更多相关文章
- 网站静态化处理—web前端优化—下【终篇】(13)
网站静态化处理—web前端优化—下[终篇](13) 本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部, ...
- 【Unity Shader】(三) ------ 光照模型原理及漫反射和高光反射的实现
[Unity Shader](三) ---------------- 光照模型原理及漫反射和高光反射的实现 [Unity Shader](四) ------ 纹理之法线纹理.单张纹理及遮罩纹理的实现 ...
- 【Unity Shader】(四) ------ 纹理之法线纹理、单张纹理及遮罩纹理的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- 【Unity Shader】(五) ------ 透明效果之半透明效果的实现及原理
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题 [Unity Shader学习笔记](三) -- ...
- 【Unity Shader】(十) ------ UV动画原理及简易实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- 【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...
- 【Unity Shader】(八) ------ 高级纹理之立方体纹理及光线反射、折射的实现
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) -- ...
- 【Unity Shader】(七) ------ 复杂的光照(下)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
- 【Unity Shader】(六) ------ 复杂的光照(上)
笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Sha ...
随机推荐
- Python常用模块-随机数模块(random)
Python常用模块-随机数模块(random) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.常用方法举例 #!/usr/bin/env python #_*_coding: ...
- uva 10625 Board Wrapping
https://vjudge.net/problem/UVA-10652 给出n个长方形,用一个面积尽量小的凸多边形把他们围起来 求木板占包装面积的百分比 输入给出长方形的中心坐标,长,宽,以及长方形 ...
- [iOS]Xcode处理过时方法的警告
####强迫症的福利, 有的时候, 我们特别讨厌Xcode中的代码警告, 以下就是遇到各种警告的时候的处理方法:(后续会一直更新) 产生警告的原因: 某些方法废弃了, 会产生警告! 样式: 处理方法: ...
- js 正则学习小记之匹配字符串字面量优化篇
昨天在<js 正则学习小记之匹配字符串字面量>谈到 个字符,除了第一个 个,只有 个转义( 个字符),所以 次,只有 次成功.这 次匹配失败,需要回溯后用 [^"] 才能匹配成功 ...
- 为ASP.NET控件加入快捷菜单
ContextMenu Control 快捷菜单控件概述: MSDN Liabrary 中包含了几个DHTML快捷菜单的示例.分别提供了对这一功能的不能实现方法.一个快捷菜单就是在页面中任何位置的一组 ...
- HttpClient与HttpUrlConnection下载速度比较
Android有两套http的API,刚开始使用网络编程时多少有些迷惑到底用哪个好呢?其实孰优孰劣无需再争论,google已经指出HttpUrlConnection是Android更优的选择,并在SD ...
- CTSC2018&APIO2018游记
CTSC2018&APIO2018游记 Day 0 傍晚出发,从长沙通往帝都的软卧哟. 然而长沙某中学坐高铁比我们晚出发还早到 Day 1 为了正经地写游记我决定忍住不在博客里吐槽酒店. 午饭 ...
- python3之模块urllib
urllib是python内置的HTTP请求库,无需安装即可使用,它包含了4个模块: request:它是最基本的http请求模块,用来模拟发送请求 error:异常处理模块,如果出现错误可以捕获这些 ...
- SQL Server修改默认端口号1433
方法1: 1) SqlServer服务使用两个端口:TCP-1433.UDP-1434. 其中1433用于供SqlServer对外提供服务,1434用于向请求者返回SqlServer使用了那个TCP/ ...
- (maven项目)使用java -jar命令遇到的小问题|xx.jar中没有主清单或Error:Invalid or corrupt jarfile xx.jar
xx.jar中没有主清单或Error:Invalid or corrupt jarfile xx.jar 遇到这个问题,是因为你的jar包没有设置主类的入口. 即在META-INF文件夹的MANIFE ...