裸LCT。。 不知为何单旋splay比双旋快。。。。

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
struct node
{node *l,*r,*f;int val,sum,flip;node(){l=r=f=NULL;flip=0;sum=val=0;}node(int _val) {l=r=f=NULL;sum=val=_val;flip=0;}
};
node *tree[100000];
inline bool isroot(node *u) {return ((!u->f)||(u->f->l!=u&&u->f->r!=u));}
inline void update(node *u)
{u->sum=u->val;if (u->l) u->sum+=u->l->sum;if (u->r) u->sum+=u->r->sum;
}
inline void down(node *p)
{if (p->flip){p->flip=0;if (p->l) p->l->flip^=1;if (p->r) p->r->flip^=1;swap(p->l,p->r);}
}
void zig(node *u)
{node *x=u->f,*y=x->f;u->f=y;x->f=u;if (y){if (y->l==x) y->l=u;else if (y->r==x) y->r=u;}x->l=u->r;if (x->l) x->l->f=x;u->r=x;update(x);
}
void zag(node *u)
{node *x=u->f,*y=x->f;u->f=y;x->f=u;if (y){if (y->l==x) y->l=u;else if (y->r==x) y->r=u;}x->r=u->l;if (x->r) x->r->f=x;u->l=x;update(x);
}
void push_down(node *p) {if (!isroot(p)) push_down(p->f); down(p);}
void splay(node *p)
{push_down(p);while (!isroot(p)){node *x=p->f;if (x->l==p) zig(p);else zag(p);}update(p);
}
node* expose(node *p)
{node *q;for (q=NULL;p;p=p->f){splay(p);p->r=q;update(q=p);}return q;
}
node *root(node *p)
{node *u=expose(p);down(u);while (u->l){u=u->l;down(u);}return u;
}
void evert(node *p)
{expose(p);splay(p);p->flip^=1;
}
int n,m;
int main()
{cin>>n;for (int i=1;i<=n;++i){int x;scanf("%d",&x);tree[i]=new node(x);}cin>>m;while (m--){char com[20];int a,b;scanf("%s",com);scanf("%d%d",&a,&b);if (com[0]=='b'){if (root(tree[a])==root(tree[b])) printf("no\n");else {printf("yes\n");evert(tree[a]);tree[a]->f=tree[b];}}else if (com[0]=='p'){splay(tree[a]);tree[a]->val=b;}else{if (root(tree[a])!=root(tree[b])) printf("impossible\n");else {int ans=0;ans+=expose(tree[a])->sum;node *p=expose(tree[b]);ans+=p->sum;ans-=2*(expose(p)->sum);printf("%d\n",ans+p->val);}}}return 0;
}

BZOJ1180 [CROATIAN2009]OTOCI相关推荐

  1. bzoj1180: [CROATIAN2009]OTOCI

    题目大意:询问两点是否连通(反人类的是连通输no,不联通输yes...),单点权值修改,路径和. 思路:正常的动态树,搞搞就行了. #include<cstdio> #include< ...

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

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

  3. SPOJ OTOCI 动态树 LCT

    SPOJ OTOCI 裸的动态树问题. 回顾一下我们对树的认识. 最初,它是一个连通的无向的无环的图,然后我们发现由一个根出发进行BFS 会出现层次分明的树状图形. 然后根据树的递归和层次性质,我们得 ...

  4. 【LCT】[COI2009] OTOCI

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

  5. 洛谷P4312 [COI2009] OTOCI

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

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

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

  7. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

  8. alert时java还时js_js 加alert后才能执行方法

    原因是:访问页面时,某些js方法还没初始化(或者还没有加载出来)此时调用肯定不执行.alert起到了延迟的功能,当用户点击确定此时要执行的js恰好初始化完成,能正常执行. 解决方法是 加setTime ...

  9. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

最新文章

  1. deepin linux下python安装mysqldb
  2. BAT都在使用的开源接口管理平台,你用了吗?
  3. 2018年10月28日宁波dotnet社区活动回顾及下次活动预告
  4. oracle 匿名段,这段匿名块看着没什么问题啊
  5. sql server 设置用户名和密码
  6. [导入]一个asp中关于execute的测试
  7. 【信号与系统】笔记合集,你确定不收藏吗?我已经收藏了
  8. SpringCloud微服务之学生管理
  9. 苏宁“北京攻略”:老阵地,新战场 | 一点财经
  10. 信贷风控中如何定位基站位置
  11. SHH could not initialize proxy - the owning Session was closed 和延迟加载问题
  12. 慎用yum update
  13. 如果你认为高端红酒与普通红酒成份是一样的话,我也可以告诉你...
  14. 瑞萨开发板编译和烧录
  15. 【广州华锐互动】VR数字虚拟展厅为企业提升品牌形象和知名度
  16. ambari 修改服务器名,ambari - Ambari无法运行用于修改用户配置单元的自定义钩子 - 堆栈内存溢出...
  17. KRnano打开黑屏: FATAL ERROR,【解决办法】
  18. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用43
  19. 【踩坑向】虚拟机桥接模式连不上网怎么办?
  20. finalshell强劲功能介绍

热门文章

  1. mysql修改游戏元宝数量_天龙诀数据库连接元宝修改方法
  2. 腾讯云Linux服务器安装Wordpress,一键建站入门教程
  3. 软件工程流程图编写软件_如何编写杀手级软件工程简历
  4. 金仓数据库KingbaseES的安全特性
  5. Transformer之Self-attention
  6. android安装linux软件安装,Android for Linux 开发工具安装说明
  7. 公告里面的天气预报的代码
  8. 4000万的重量级闹剧
  9. MIDI制作的相关软件
  10. 如何在word里面优雅地插入代码