简单题,主要为了练手。

  1. #include <cstdio>
  2. #include <iostream>
  3. #define maxn 100010
  4. using namespace std;
  5.  
  6. namespace L {
  7. int pnt[maxn], pre[maxn], son[maxn][], rtg[maxn], val[maxn], mxv[maxn];
  8.  
  9. inline void update( int nd ) {
  10. mxv[nd] = max( val[nd], max(mxv[son[nd][]],mxv[son[nd][]]) );
  11. }
  12. void rotate( int nd, int d ) {
  13. int p = pre[nd];
  14. int s = son[nd][!d];
  15. int ss = son[s][d];
  16. son[nd][!d] = ss;
  17. son[s][d] = nd;
  18. if( p ) son[p][ nd==son[p][] ] = s;
  19. else pnt[s] = pnt[nd];
  20. pre[nd] = s;
  21. pre[ss] = nd;
  22. pre[s] = p;
  23. update(nd);
  24. update(s);
  25. }
  26. void pushdown( int nd ) {
  27. if( rtg[nd] ) {
  28. int &ls=son[nd][], &rs=son[nd][];
  29. swap(ls,rs);
  30. rtg[ls] ^= ;
  31. rtg[rs] ^= ;
  32. rtg[nd] = ;
  33. }
  34. }
  35. void bigpush( int nd ) {
  36. if( pre[nd] ) bigpush(pre[nd]);
  37. pushdown(nd);
  38. }
  39. void splay( int nd, int top= ) {
  40. bigpush(nd);
  41. while( pre[nd]!=top ) {
  42. int p = pre[nd];
  43. int nl = nd==son[p][];
  44. if( pre[p]==top ) {
  45. rotate( p, nl );
  46. } else {
  47. int pp = pre[p];
  48. int pl = p==son[pp][];
  49. if( nl==pl ) {
  50. rotate( pp, pl );
  51. rotate( p, nl );
  52. } else {
  53. rotate( p, nl );
  54. rotate( pp, pl );
  55. }
  56. }
  57. }
  58. }
  59. void access( int nd ) {
  60. int u = nd;
  61. int v = ;
  62. while( u ) {
  63. splay(u);
  64. int s = son[u][];
  65. pre[s] = ;
  66. pnt[s] = u;
  67. pre[v] = u;
  68. son[u][] = v;
  69. update(u);
  70. v = u;
  71. u = pnt[u];
  72. }
  73. splay(nd);
  74. }
  75. void init( int n ) {
  76. for( int i=; i<=n; i++ )
  77. pnt[i] = pre[i] = son[i][] = son[i][]
  78. = rtg[i] = val[i] = mxv[i] = ;
  79. }
  80. void makeroot( int nd ) {
  81. access(nd);
  82. rtg[nd] ^= ;
  83. }
  84. void link( int u, int v ) {
  85. makeroot(u);
  86. makeroot(v);
  87. pnt[u] = v;
  88. }
  89. void inc_val( int nd, int w ) {
  90. splay( nd );
  91. val[nd] += w;
  92. update( nd );
  93. }
  94. int qu_max( int u, int v ) {
  95. makeroot(u);
  96. access(v);
  97. return max( val[v], mxv[son[v][]] );
  98. }
  99. };
  100.  
  101. int n, q;
  102.  
  103. int main() {
  104. scanf( "%d", &n );
  105. L::init(n);
  106. for( int i=,u,v; i<=n; i++ ) {
  107. scanf( "%d%d", &u, &v );
  108. L::link(u,v);
  109. }
  110. scanf( "%d", &q );
  111. while( q-- ) {
  112. char ch[];
  113. int u, v, w;
  114. scanf( "%s", ch );
  115. if( ch[]=='I' ) {
  116. scanf( "%d%d", &u, &w );
  117. L::inc_val(u,w);
  118. } else {
  119. scanf( "%d%d", &u, &v );
  120. printf( "%d\n", L::qu_max(u,v) );
  121. }
  122. }
  123. }

Uva1553 Caves and Tunnels LCT的更多相关文章

  1. URAL 题目1553. Caves and Tunnels(Link Cut Tree 改动点权,求两点之间最大)

    1553. Caves and Tunnels Time limit: 3.0 second Memory limit: 64 MB After landing on Mars surface, sc ...

  2. ural1553 Caves and Tunnels

    Caves and Tunnels Time limit: 3.0 secondMemory limit: 64 MB After landing on Mars surface, scientist ...

  3. URAL1553 Caves and Tunnels 树链剖分 动态树

    URAL1553 维护一棵树,随时修改某个节点的权值,询问(x,y)路径上权值最大的点. 树是静态的,不过套动态树也能过,时限卡的严就得上树链剖分了. 还是那句话 splay的核心是splay(x) ...

  4. URAL 1553. Caves and Tunnels 树链拆分

    一颗树 每次出发点右键值是0 2操作模式1.第一i右键点值添加x 2.乞讨u至v在这条路上右上方值 树为主的连锁分裂称号 #include <cstdio> #include <cs ...

  5. LCT(link cut tree) 动态树

    模板参考:https://blog.csdn.net/saramanda/article/details/55253627 综合各位大大博客后整理的模板: #include<iostream&g ...

  6. 一堆LCT板子

    搞了一上午LCT,真是累死了-- 以前总觉得LCT高大上不好学不好打,今天打了几遍感觉还可以嘛= =反正现在的水平应付不太难的LCT题也够用了,就这样好了,接下来专心搞网络流. 话说以前一直YY不出来 ...

  7. 动态树之LCT(link-cut tree)讲解

    动态树是一类要求维护森林的连通性的题的总称,这类问题要求维护某个点到根的某些数据,支持树的切分,合并,以及对子树的某些操作.其中解决这一问题的某些简化版(不包括对子树的操作)的基础数据结构就是LCT( ...

  8. 在此为LCT开一个永久的坑

    其实我连splay都还不怎么会. 今天先抄了黄学长的bzoj2049,以后一定要把它理解了. 写LCT怎么能不%数据结构大神yeweining呢?%%%chrysanthemums  %%%切掉大森林 ...

  9. 【BZOJ2157】旅游 LCT

    模板T,SB的DMoon..其实样例也是中国好样例...一开始不会复制,yangyang:找到“sample input”按住shift,按page down.... #include <ios ...

随机推荐

  1. python作业购物车(第二周)

    一.作业需求: 1.启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 4 ...

  2. 设计模式之Adapter

    设计模式总共有23种模式这仅仅是为了一个目的:解耦+解耦+解耦...(高内聚低耦合满足开闭原则) 介绍: 将两个不兼容的类纠合在一起使用,属于结构型模式,也有人称它为wrapper(包装类). 包装类 ...

  3. thinkphp对数据库的增删改查(查询构造器)

  4. Opencv 配置VS2012

    开始接触图像处理有一段时间了,经过前期的调研,和相关入门知识的学习,开始接触一些图像处理应用的工具.Opencv是一个图像处理的开源库,由于其开放的协议架构,国内外很多科研机构和团队都在基于openc ...

  5. Deep Learning基础--各个损失函数的总结与比较

    损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好.损失函数是经验 ...

  6. 斐讯路由器L(联)B(壁)K-码兑换包安全下车通道(图文教程)

    大家好,最近大家比较关心的斐讯路由器如何下车问题,楼主亲自试提取了一遍,记录下过程,欢迎大家一起讨论. 言归正传,上图,上图! No.1 打开斐讯提供的良心k码退换通道: https://tech-s ...

  7. win10产品密钥 win10专业版激活码key

    转载地址:http://www.xitongcheng.com/jiaocheng/xtazjc_article_35407.html https://blog.csdn.net/WangJianku ...

  8. [ python ] 软件开发规范

    在python开发中,我们建议采用如下规范: soft/ ├── bin # 程序执行文件目录 │   ├── __init__.py │   └── start.py # 程序开始执行脚本文件 ├─ ...

  9. golang之结构体和方法

    结构体的定义 结构体是将零个或者多个任意类型的命令变量组合在一起的聚合数据类型.每个变量都叫做结构体的成员. 其实简单理解,Go语言的结构体struct和其他语言的类class有相等的地位,但是GO语 ...

  10. Python+Selenium 自动化实现实例-实现文件下载

    #coding=utf-8 from selenium import webdriver #实例化一个火狐配置文件 fp = webdriver.FirefoxProfile() #设置各项参数,参数 ...