一道几乎是板子的LCT,但是沉迷数学很久时候突然1A了这道题还是挺开心的

#include<iostream>
#include<cstdio>
using namespace std;
const int N=30005;
int n,q,sum[N],v[N],s[N],top;
char c[20];
struct qwe
{
int c[2],f,sum,lz;
}t[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
bool srt(int x)
{
return t[t[x].f].c[0]!=x&&t[t[x].f].c[1]!=x;
}
void pd(int x)
{
if(t[x].lz)
{
t[x].lz=0;
t[t[x].c[0]].lz^=1;
t[t[x].c[1]].lz^=1;
swap(t[x].c[0],t[x].c[1]);
}
}
void ud(int x)
{
t[x].sum=t[t[x].c[0]].sum+t[t[x].c[1]].sum+v[x];
}
void zhuan(int x)
{
int y=t[x].f,z=t[y].f,l=t[y].c[0]!=x,r=l^1;
if(!srt(y))
t[z].c[t[z].c[0]!=y]=x;
t[x].f=z;
t[y].c[l]=t[x].c[r];
t[t[x].c[r]].f=y;
t[x].c[r]=y;
t[y].f=x;
ud(y);
ud(x);
}
void splay(int x)
{
top=0;
s[++top]=x;
for(int i=x;!srt(i);i=t[i].f)
s[++top]=t[i].f;
for(int i=top;i>=1;i--)
pd(s[i]);
while(!srt(x))
{
int y=t[x].f,z=t[y].f;
if(!srt(y))
{
if((t[z].c[0]==y)^(t[y].c[0]==x))
zhuan(x);
else
zhuan(y);
}
zhuan(x);
}
}
void acc(int x)
{
for(int i=0;x;i=x,x=t[x].f)
{
splay(x);
t[x].c[1]=i;
ud(x);
}
}
void mkrt(int x)
{
acc(x);
splay(x);
t[x].lz^=1;
}
void lk(int x,int y)
{
mkrt(x);
t[x].f=y;
}
int getrt(int x)
{
acc(x);
splay(x);
while(t[x].c[0])
x=t[x].c[0];
return x;
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
t[i].sum=v[i]=read();
q=read();
while(q--)
{
scanf("%s",c);
int x=read(),y=read();
//cout<<c<<endl;
if(c[0]=='b')
{
if(getrt(x)==getrt(y))
puts("no");
else
{
puts("yes");
lk(x,y);
}
}
else if(c[0]=='p')
{
mkrt(x);
v[x]=y;
ud(x);
}
else
{
if(getrt(x)!=getrt(y))
puts("impossible");
else
{
mkrt(x);
acc(y);
splay(y);
printf("%d\n",t[y].sum);
}
}
}
return 0;
}
/*
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 5
*/

bzoj 1180: [CROATIAN2009]OTOCI【LCT】的更多相关文章

  1. BZOJ1180 [CROATIAN2009]OTOCI 【LCT】

    题目 给出n个结点以及每个点初始时对应的权值wi.起始时点与点之间没有连边.有3类操作: 1.bridge A B:询问结点A与结点B是否连通.如果是则输出"no".否则输出&qu ...

  2. BZOJ 1180: [CROATIAN2009]OTOCI [LCT]

    1180: [CROATIAN2009]OTOCI Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 961  Solved: 594[Submit][S ...

  3. BZOJ 1180: [CROATIAN2009]OTOCI

    1180: [CROATIAN2009]OTOCI Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 989  Solved: 611[Submit][S ...

  4. 1180: [CROATIAN2009]OTOCI(LCT)

    1180: [CROATIAN2009]OTOCI Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 1200  Solved: 747[Submit][ ...

  5. 【刷题】BZOJ 1180 [CROATIAN2009]OTOCI

    Description 给出n个结点以及每个点初始时对应的权值wi.起始时点与点之间没有连边.有3类操作: 1.bridge A B:询问结点A与结点B是否连通. 如果是则输出"no&quo ...

  6. 1180: [CROATIAN2009]OTOCI

    1180: [CROATIAN2009]OTOCI Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 1032  Solved: 638[Submit][ ...

  7. 【BZOJ2049】【LCT】Cave 洞穴勘测

    Description 辉 辉热衷于洞穴勘测.某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通 道组成,并且每条通道连接了 ...

  8. 【HDU4010】【LCT】Query on The Trees

    Problem Description We have met so many problems on the tree, so today we will have a query problem ...

  9. BZOJ 1016 最小生成树计数 【模板】最小生成树计数

    [题解] 对于不同的最小生成树,每种权值的边使用的数量是一定的,每种权值的边的作用是确定的 我们可以先做一遍Kruskal,求出每种权值的边的使用数量num 再对于每种权值的边,2^num搜索出合法使 ...

随机推荐

  1. JAVA 比较两张图片的相似度的代码

    原文:http://www.open-open.com/code/view/1448334323079 import java.awt.image.BufferedImage; import java ...

  2. c++多线程编程:常见面试题

    题目:子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码 子线程与主线程必有一个满足条件(flag == ...

  3. 了解kaggle

    Kaggle官网 数据挖掘的比赛,主要是特征工程 Kaggle 数据挖掘比赛经验分享 Kaggle 机器学习竞赛冠军及优胜者的源代码汇总 程序化广告交易中的点击率预估

  4. Scala入门到精通——第二十四节 高级类型 (三)

    作者:摆摆少年梦 视频地址:http://blog.csdn.net/wsscy2004/article/details/38440247 本节主要内容 Type Specialization Man ...

  5. Android TextView设置个别字体样式

    TextView进一步深化:       Textview 能够对其文字进行格式化.       通过查询资料,了解到格式化文字的方式主要分为两大类:  第一类:HTML标签格式化文字      代码 ...

  6. Deepin-还原Windows平台

    首次启动! 是不是感觉很迷茫呢? 找不到存在感 先设置成Windows那种高校模式(右键下面任意区域) OK了吧,然后我们找到“启动器”或者按Windows键(在Deepin linux我们称为Sup ...

  7. 工作总结 js 选择器选择多条元素 支持一起设置他们属性 $("#edumes input[type='radio']").prop("checked", false);

    $("#edumes input[type='radio']").prop("checked", false); $("#edumes input[t ...

  8. 在学习c++过程中,总结类的三个用户以及使用权限,感觉非常实用

    首先我们需要知道类的三个用户分别是:类的实现者,类的普通用户和类的继承者(派生类),接下来分别讲解这几种用户的区别. 1 .类的实现者:顾明思议,就是类的设计者,拥有最大的权限,可以访问类中任何权限的 ...

  9. 4 Ionic导航和核心组件--旅游应用

    简介:在本节课中,我们将会通过一个虚构的旅游景点来构建一款功能完善的应用.本应用的核心特性是管理用户的应用内导航.本节课的主要目的,是展现构建一个完整的应用的过程. 无论是什么移动应用,最重要的功能之 ...

  10. [转] logback logback.xml常用配置详解(一)<configuration> and <logger>

    转载文章:原文出处:http://aub.iteye.com/blog/1101260 详细整理了logback常用配置, 不是官网手册的翻译版,而是使用总结,旨在更快更透彻的理解其配置 根节点< ...