一大早上到机房想先拍一下模板,热热身.

结果....对照着染色敲的 LCT 竟然死活也调不过去(你说我抄都能抄错)

干脆自己重新敲了一遍,10min就敲完了.......

还是要相信自己

Code:

  1. #include <bits/stdc++.h>
  2. #define setIO(s) freopen(s".in","r",stdin)
  3. using namespace std;
  4. #define maxn 40000
  5. struct LCT
  6. {
  7. #define lson ch[x][0]
  8. #define rson ch[x][1]
  9. int tag[maxn],val[maxn],sumv[maxn],ch[maxn][2],f[maxn],sta[maxn];
  10. int isRoot(int x)
  11. {
  12. return !(ch[f[x]][1] == x || ch[f[x]][0] == x);
  13. }
  14. int get(int x)
  15. {
  16. return ch[f[x]][1] == x;
  17. }
  18. void mark(int x)
  19. {
  20. if(!x) return ;
  21. swap(lson, rson), tag[x] ^= 1;
  22. }
  23. void pushdown(int x)
  24. {
  25. if(!x) return ;
  26. if(tag[x])
  27. {
  28. mark(lson), mark(rson), tag[x] ^=1 ;
  29. }
  30. }
  31. void pushup(int x)
  32. {
  33. sumv[x] = sumv[lson] + sumv[rson] + val[x];
  34. }
  35. void rotate(int x)
  36. {
  37. int old = f[x], fold = f[old], which = get(x);
  38. if(!isRoot(old)) ch[fold][ch[fold][1] == old] = x;
  39. ch[old][which] = ch[x][which ^ 1], f[ch[old][which]] = old;
  40. ch[x][which ^ 1 ] = old, f[old] = x, f[x] = fold;
  41. pushup(old),pushup(x);
  42. }
  43. void splay(int x)
  44. {
  45. int u = x, v = 0;
  46. sta[++v] = u;
  47. while(!isRoot(u)) sta[++v] = f[u], u = f[u];
  48. while(v) pushdown(sta[v--]);
  49. u = f[u];
  50. for(int fa; (fa = f[x]) != u; rotate(x))
  51. if(f[fa] != u) rotate(get(fa) == get(x) ? fa: x);
  52. }
  53. void Access(int x)
  54. {
  55. for(int y = 0; x ; y = x,x = f[x])
  56. {
  57. splay(x), rson = y, pushup(x);
  58. }
  59. }
  60. void makeRoot(int x)
  61. {
  62. Access(x), splay(x), mark(x);
  63. }
  64. void link(int a,int b)
  65. {
  66. makeRoot(a), f[a] = b;
  67. }
  68. void split(int a,int b)
  69. {
  70. makeRoot(a), Access(b), splay(b);
  71. }
  72. }T;
  73. struct Union_Find
  74. {
  75. int p[maxn];
  76. void init()
  77. {
  78. for(int i = 0;i < maxn ;++i) p[i] = i;
  79. }
  80. int find(int x)
  81. {
  82. return p[x] == x ? x : p[x] = find(p[x]);
  83. }
  84. int merge(int a,int b)
  85. {
  86. int x = find(a), y = find(b);
  87. if(x == y) return 0;
  88. p[x] = y;
  89. return 1;
  90. }
  91. }U;
  92. char str[20];
  93. int main()
  94. {
  95. // setIO("input");
  96. U.init();
  97. int n;
  98. scanf("%d",&n);
  99. for(int i = 1;i <= n; ++i) scanf("%d",&T.val[i]), T.sumv[i] = T.val[i];
  100. int q,a,b,c;
  101. scanf("%d",&q);
  102. while(q --)
  103. {
  104. scanf("%s",str);
  105. if(str[0] == 'b')
  106. {
  107. scanf("%d%d",&a,&b);
  108. if(!U.merge(a,b))
  109. printf("no\n");
  110. else
  111. {
  112. T.link(a, b);
  113. printf("yes\n");
  114. }
  115. }
  116. if(str[0] == 'p' )
  117. {
  118. scanf("%d%d",&a,&b);
  119. T.makeRoot(a),T.val[a] = b, T.pushup(a);
  120. }
  121. if(str[0] == 'e')
  122. {
  123. scanf("%d%d",&a,&b);
  124. if(U.find(a) == U.find(b))
  125. {
  126. T.split(a,b);
  127. printf("%d\n",T.sumv[b]);
  128. }else printf("impossible\n");
  129. }
  130. }
  131. return 0;
  132. }

  

BZOJ 1180 / 2843 LCT模板题_双倍经验的更多相关文章

  1. 高手过愚人节 Manancher模板题_双倍经验

    Code: #include <cstdio> #include <algorithm> #include <cstring> #define setIO(s) f ...

  2. bzoj2049-洞穴勘测(动态树lct模板题)

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

  3. BZOJ 2724 蒲公英 | 分块模板题

    题意 给出一个序列,在线询问区间众数.如果众数有多个,输出最小的那个. 题解 这是一道分块模板题. 一个询问的区间的众数,可能是中间"整块"区间的众数,也可能是左右两侧零散的数中的 ...

  4. 【BZOJ2049,2631,3282,1180】LCT模板四连A

    好吧我并不想讲LCT 只是贴4个代码~ [BZOJ2049][Sdoi2008]Cave 洞穴勘测 #include <cstdio> #include <cstring> # ...

  5. BZOJ 2982: combination Lucas模板题

    Code: #include<bits/stdc++.h> #define ll long long #define maxn 1000003 using namespace std; c ...

  6. BZOJ 1180: [CROATIAN2009]OTOCI

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

  7. LuoguP3690 【模板】Link Cut Tree (动态树) LCT模板

    P3690 [模板]Link Cut Tree (动态树) 题目背景 动态树 题目描述 给定n个点以及每个点的权值,要你处理接下来的m个操作.操作有4种.操作从0到3编号.点从1到n编号. 0:后接两 ...

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

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

  9. 【BZOJ 1507】【NOI 2003】&【Tyvj P2388】Editor 块状链表模板题

    2016-06-18 当时关于块状链表的想法是错误的,之前维护的是一个动态的$\sqrt{n}$,所以常数巨大,今天才知道原因TwT,请不要参照这个程序为模板!!! 模板题水啊水~~~ 第一次写块状链 ...

随机推荐

  1. asp.net--WebService知识点

    开头是这样的 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = Wsi ...

  2. ubuntu中安装hadoop集群

    hadoop是由java 语言编写的主从结构分布式计算存储架构 准备工作: 操作系统: Ubuntu16.04 软件安装包:jdk-8u171-linux-x64.tar.gz : hadoop-2. ...

  3. [Cypress] Stub Network Requests in a Cypress Test

    To keep our tests fast and easily repeatable, it makes sense to create many integration tests and fe ...

  4. POJ 3280 Cheapest Palindrome DP题解

    看到Palindrome的题目.首先想到的应该是中心问题,然后从中心出发,思考怎样解决. DP问题通常是从更加小的问题转化到更加大的问题.然后是从地往上 bottom up地计算答案的. 能得出状态转 ...

  5. D3D triangle list(三角形列) 小样例

    画三角形列的样例程序 #pragma once #pragma comment(lib,"d3d9.lib") #pragma comment(lib,"d3dx9.li ...

  6. leetcode_num179_Largest Number

    Given a list of non negative integers, arrange them such that they form the largest number. For exam ...

  7. UVA - 10061 How many zero&#39;s and how many digits ?

    n!=x*b^y, 当x为正整数时,最大的y就是n!末尾0的个数了, 把n,b分别拆成素因子相乘的形式: 比如, n=5,b=16 n=5,b=2^4, 非常明显,末尾0的个数为0 10进制时,n!= ...

  8. Java基础:异常捕获顺序

    转载请注明出处:jiq•钦's technical Blog public voidtestException(){ int a[] = {1,2,3};int q = 0; try{ for(int ...

  9. SAP WEBSERVICE Soap中RPC-style和Document-style

    RPC是以方法调用的方式描写叙述WebSerivce的,也就是说,你要说清楚调用的那个方法,以及各个參数的名称和值.要描写叙述这些东东.SOAP消息就要有一个统一的规范,指出那一部分是方法名.哪个部分 ...

  10. DDos攻击篇

    DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是目前最强大.最难防御的攻击之一. 1.1. SY ...