题目链接

模板题都错了这么多次。。

  1. //边权赋到点上 树剖模板
  2. //注意LCA、链的顶端不能统计到答案!
  3. #include <cstdio>
  4. #include <cctype>
  5. #include <algorithm>
  6. #define gc() getchar()
  7. #define lson l,m,rt<<1
  8. #define rson m+1,r,rt<<1|1
  9. const int N=1e5+5;
  10. int n,m,cnt,ep[N],W[N],id[N],sz[N],dep[N],son[N],fa[N],top[N],Enum,H[N],to[N<<1],nxt[N<<1],val[N<<1];
  11. struct Seg_Tree
  12. {
  13. int A[N],mx[N<<2];
  14. inline void PushUp(int rt) {mx[rt]=std::max(mx[rt<<1],mx[rt<<1|1]);}
  15. void Build(int l,int r,int rt)
  16. {
  17. if(l==r) mx[rt]=A[l];
  18. else
  19. {
  20. int m=l+r>>1;
  21. Build(lson), Build(rson);
  22. PushUp(rt);
  23. }
  24. }
  25. void Modify(int l,int r,int rt,int p,int v)
  26. {
  27. if(l==r) mx[rt]=v;
  28. else
  29. {
  30. int m=l+r>>1;
  31. if(p<=m) Modify(lson,p,v);
  32. else Modify(rson,p,v);
  33. PushUp(rt);
  34. }
  35. }
  36. int Query_Max(int l,int r,int rt,int L,int R)
  37. {
  38. if(L<=l && r<=R) return mx[rt];
  39. int m=l+r>>1;
  40. if(L<=m)
  41. if(m<R) return std::max(Query_Max(lson,L,R),Query_Max(rson,L,R));
  42. else return Query_Max(lson,L,R);
  43. return Query_Max(rson,L,R);
  44. }
  45. }t;
  46. inline int read()
  47. {
  48. int now=0,f=1;register char c=gc();
  49. for(;!isdigit(c);c=gc()) if(c=='-') f=-1;
  50. for(;isdigit(c);now=now*10+c-'0',c=gc());
  51. return now*f;
  52. }
  53. inline void AddEdge(int u,int v,int w)
  54. {
  55. to[++Enum]=v, nxt[Enum]=H[u], val[Enum]=w, H[u]=Enum;
  56. to[++Enum]=u, nxt[Enum]=H[v], val[Enum]=w, H[v]=Enum;
  57. }
  58. void DFS1(int x)
  59. {
  60. int mx=0; sz[x]=1;
  61. for(int v,i=H[x]; i; i=nxt[i])
  62. if((v=to[i])!=fa[x])
  63. {
  64. fa[v]=x, dep[v]=dep[x]+1, DFS1(v), sz[x]+=sz[v];
  65. W[v]=val[i], ep[i>>1]=v;
  66. if(mx<sz[v]) mx=sz[v], son[x]=v;
  67. }
  68. }
  69. void DFS2(int x,int tp)
  70. {
  71. id[x]=++cnt, t.A[cnt]=W[x], top[x]=tp;
  72. if(son[x])
  73. {
  74. DFS2(son[x],tp);
  75. for(int i=H[x]; i; i=nxt[i])
  76. if(to[i]!=fa[x] && to[i]!=son[x])
  77. DFS2(to[i],to[i]);
  78. }
  79. }
  80. int Query_Chain(int x,int y)
  81. {
  82. int res=0;
  83. while(top[x]!=top[y])//while(top[x]^top[y])
  84. {
  85. if(dep[top[x]]<dep[top[y]]) std::swap(x,y);
  86. res=std::max(res,t.Query_Max(1,n,1,id[top[x]],id[x])), x=fa[top[x]];
  87. }
  88. if(x==y) return res;//LCA不统计入答案!
  89. if(dep[x]>dep[y]) std::swap(x,y);
  90. return std::max(res,t.Query_Max(1,n,1,id[son[x]]/*not id[x]!*/,id[y]));
  91. }
  92. int main()
  93. {
  94. Enum=1;
  95. n=read();
  96. for(int u,v,w,i=1; i<n; ++i)
  97. u=read(),v=read(),w=read(),AddEdge(u,v,w);
  98. DFS1(1), DFS2(1,1);
  99. t.Build(1,n,1);
  100. char opt[7]; int x,y;
  101. while(scanf("%s",opt),opt[0]!='D')
  102. {
  103. x=read(),y=read();
  104. if(opt[0]=='C') t.Modify(1,n,1,id[ep[x]],y);
  105. else printf("%d\n",Query_Chain(x,y));;
  106. }
  107. return 0;
  108. }

洛谷.4114.Qtree1(树链剖分)的更多相关文章

  1. 洛谷 P4114 Qtree1 树链剖分

    目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例: 输出样例: 说明 说明 思路 Change Query AC代码 总结 题面 题目链接 P4114 Qt ...

  2. 洛谷P3979 遥远的国度 树链剖分+分类讨论

    题意:给出一棵树,这棵树每个点有权值,然后有3种操作.操作一:修改树根为rt,操作二:修改u到v路径上点权值为w,操作三:询问以rt为根x子树的最小权值. 解法:如果没有修改树根操作那么这题就是树链剖 ...

  3. [洛谷P3384] [模板] 树链剖分

    题目传送门 显然是一道模板题. 然而索引出现了错误,狂wa不止. 感谢神犇Dr_J指正.%%%orz. 建线段树的时候,第44行. 把sum[p]=bv[pos[l]]%mod;打成了sum[p]=b ...

  4. 洛谷3384&bzoj1036树链剖分

    值得注意的是: 一个点的子树是存在一起的...也就是说我们修改子树的时候只用... /********************************************************* ...

  5. Qtree1 - 树链剖分

    树剖裸题?(复习练练手) // luogu-judger-enable-o2 #include <bits/stdc++.h> using namespace std; ],size[], ...

  6. 洛谷 P3384 【模板】树链剖分

    树链剖分 将一棵树的每个节点到它所有子节点中子树和(所包含的点的个数)最大的那个子节点的这条边标记为"重边". 将其他的边标记为"轻边". 若果一个非根节点的子 ...

  7. 树链剖分详解(洛谷模板 P3384)

    洛谷·[模板]树链剖分 写在前面 首先,在学树链剖分之前最好先把 LCA.树形DP.DFS序 这三个知识点学了 emm还有必备的 链式前向星.线段树 也要先学了. 如果这三个知识点没掌握好的话,树链剖 ...

  8. ⌈洛谷1505⌋⌈BZOJ2157⌋⌈国家集训队⌋旅游【树链剖分】

    题目链接 [洛谷] [BZOJ] 题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T ...

  9. BZOJ2243 洛谷2486 [SDOI2011]染色 树链剖分

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2243 题目传送门 - 洛谷2486 题意概括 一棵树,共n个节点. 让你支持以下两种操作,共m次操 ...

随机推荐

  1. 【转】Python中的字符串与字符编码

    [转]Python中的字符串与字符编码 本节内容: 前言 相关概念 Python中的默认编码 Python2与Python3中对字符串的支持 字符编码转换 一.前言 Python中的字符编码是个老生常 ...

  2. 配置使用OpenCV静态链接库

    配置opencv静态链接库需要用到:staticlib 在配置链接器->附加库目录时应该为staticlib的路径.同理若是利用动态链接库则只需要lib的路径: 动态链接库则使用lib,然而在使 ...

  3. 在SecureCRT中做make menuconfig乱码

      不能在SecureCRT中做(显示为乱码),从高手那里学来一招,解决了这个问题: options--terminal--emulation-- xterm  ansi color1.先设置终端为x ...

  4. InetAddress问题

    InetAddress的方法 当输入InetAddress.getByAddress(new byte[]{127.0.0.1})的时候不会报错, 但是ip的各段值是0-255,当new byte[] ...

  5. webpack-clean-webpack-plugin

    在webpack中打包生成的文件会覆盖之前的文件,不过生成文件的时候文件名加了hash之后会每次都生成不一样的文件,这就会很麻烦,不但会生成很多冗余的文件,还很难搞清楚到底是哪个文件,这就需要引入该插 ...

  6. java多线程快速入门(十一)

    在方法上面加synchonizd用的是this锁 package com.cppdy; class MyThread7 implements Runnable { private Integer ti ...

  7. VS2008/2005 MFC程序调试经验

    我的VS2008不知道是有bug还是自己的问题,很多时候变量定义后CTRL+F5运行却没反应,一定要“生成解决方案”下才行? 1.没有可用于当前位置的源代码 将工具->选项->调试-> ...

  8. python 全栈开发,Day25(复习,序列化模块json,pickle,shelve,hashlib模块)

    一.复习 反射 必须会 必须能看懂 必须知道在哪儿用 hasattr getattr setattr delattr内置方法 必须能看懂 能用尽量用__len__ len(obj)的结果依赖于obj. ...

  9. centos下配置DNS

    centos网络配置实例 1,配置DNSvi /etc/resolv.conf加入: 代码如下: nameserver 192.168.0.1 nameserver 8.8.8.8 nameserve ...

  10. ***PHP基于H5的微信支付开发详解(CI框架)

    这次总结一下用户在微信内打开网页时,可以调用微信支付完成下单功能的模块开发,也就是在微信内的H5页面通过jsApi接口实现支付功能.当然了,微信官网上的微信支付开发文档也讲解的很详细,并且有实现代码可 ...