链接

提交链接

题解

对边的修改算到点上
只需要修改下面的地方

代码

#include<bits/stdc++.h>
#define N 10010
#define INF 0x3f3f3f3f
#define eps 1e-10
#define pi 31592653589793
#define P 1000000007
#define LL long long
#define pb push_back
#define fi first
#define se second
#define cl clear
#define si size
#define lb lower_bound
#define ub upper_bound
#define mem(x) memset(x,0,sizeof x)
#define sc(x) scanf("%d",&x)
#define scc(x,y) scanf("%d%d",&x,&y)
#define sccc(x,y,z) scanf("%d%d%d",&x,&y,&z)
using namespace std;
vector<int> a[N];
int n,m,cnt,rt,tg,son[N],top[N],id[N],fa[N],d[N],sz[N],rk[N],w[N],mod;
int f[N<<2];
void dfs1(int x,int ffa){sz[x]=1;for(auto i:a[x]) if (i!=ffa){fa[i]=x; d[i]=d[x]+1; dfs1(i,x); sz[x]+=sz[i];if (sz[i]>sz[son[x]]) son[x]=i;}
}
void dfs2(int x,int t){top[x]=t; id[x]=++cnt; rk[cnt]=x;if (!son[x]) return;dfs2(son[x],t);for (auto i:a[x]) if (i!=son[x] && i!=fa[x]) dfs2(i,i);
}void updata(int x,int l,int r,int p){if (l==r){f[x]=tg;}else{int t=l+r>>1;if (p<=t) updata(x<<1,l,t,p);elseupdata(x<<1|1,t+1,r,p);f[x]=max(f[x<<1],f[x<<1|1]);}
}int query(int x,int l,int r,int fl,int fr){if (l==fl && r==fr) return f[x];int t=l+r>>1;if (fr<=t)return query(x<<1,l,t,fl,fr);elseif (fl>t)return query(x<<1|1,t+1,r,fl,fr);elsereturn max(query(x<<1,l,t,fl,t),query(x<<1|1,t+1,r,t+1,fr));
}int sum(int x,int y){int ans=0;while(top[x]!=top[y]){if (d[top[x]]<d[top[y]]) swap(x,y);ans=max(ans,query(1,1,n,id[top[x]],id[x]));x=fa[top[x]];}if(x==y) return ans;if (d[x]>d[y]) swap(x,y);ans=max(ans,query(1,1,n,id[x]+1,id[y]));return ans;
}int e[N][3];
int main(){int T;sc(T);while(T--){sc(n);for (int i=1;i<=n;i++) a[i].clear(),son[i]=0;for (int i=1;i<=n*4;i++) f[i]=0;cnt=0;for (int i=1,x,y,z;i<n;i++){sccc(x,y,z);a[x].pb(y),a[y].pb(x);e[i][0]=x;e[i][1]=y;e[i][2]=z;}dfs1(1,-1);dfs2(1,1);for(int i=1;i<n;i++){if (d[e[i][0]]<d[e[i][1]]) swap(e[i][0],e[i][1]);tg=e[i][2];updata(1,1,n,id[e[i][0]]);}char ch[10];scanf("%s",ch);while(ch[0]!='D'){int x,y;scc(x,y);if (ch[0]=='Q'){printf("%d\n",sum(x,y));}else{tg=y;updata(1,1,n,id[e[x][0]]);}scanf("%s",ch);}}
}

SPOJ Query on a tree 树链剖分 边修改相关推荐

  1. SPOJ - QTREE Query on a tree(树链剖分+线段树)

    题目链接:点击查看 题目大意:给出一棵由n个点组成的树,再给出数个操作,每次操作分为下列几种类型: QUERY x y:询问点x-点y这条路径上的所有边权的最大值 CHANGE x y:将第x条边的权 ...

  2. SPOJ 375 query on a tree 树链剖分

    题意: 给一棵树型数据结构 ①支持修改边的权值      ②支持成段边权最值查询 树链剖分入门题. 树链剖分+线段树 用的notonlysuccess的线段树--不开结构体事先预处理的那种 我以前写的 ...

  3. HDU - 3804 Query on a tree(树链剖分+线段树+离线处理)

    题目链接:点击查看 题目大意:给出一棵树,每条边上都有一个权值,给出m个查询:a,b:问从点1到点a的唯一路径上,在边权小于等于b的边中选出边权最大的值输出,若没有符合条件的边则输出-1: 题目分析: ...

  4. POJ 3237.Tree -树链剖分(边权)(边值更新、路径边权最值、区间标记)贴个板子备忘...

    Tree Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 12247   Accepted: 3151 Descriptio ...

  5. CodeForces - 343D Water Tree(树链剖分+线段树)

    题目链接: 题目大意:给出一棵由n个点组成的树,初始时每个点的权值为0,接下来有m个操作,每个操作分为以下三种: 1 x:将包括节点x在内的所有子孙节点的权值都改为1 2 x:将包括节点x在内的所有父 ...

  6. 计蒜客 - Distance on the tree(树链剖分+离线处理+线段树)

    题目链接:点击查看 题目大意:给出一颗含有n个节点的树,每条边都有权值,现在给出m个询问,每次询问的格式为u,v,w,我们需要求出在路径u-v上,边权小于等于w的边的个数 题目分析:因为一开始不会主席 ...

  7. POJ 3237 Tree (树链剖分 路径剖分 线段树的lazy标记)

    题目链接:http://poj.org/problem?id=3237 一棵有边权的树,有3种操作. 树链剖分+线段树lazy标记.lazy为0表示没更新区间或者区间更新了2的倍数次,1表示为更新,每 ...

  8. HDU 5044 Tree 树链剖分

    树链剖分离线处理所有的增加操作.考虑如果在线性结构上面处理这样的问题,只要把增加区域的起始点+w,结束点的后面一个点-w,最终输出答案的时候只要扫描一遍就好了,现在通过树链剖分把树转化为类似的线性结构 ...

  9. Tree(树链剖分+线段树延迟标记)

    Tree http://poj.org/problem?id=3237 Time Limit: 5000MS   Memory Limit: 131072K Total Submissions: 12 ...

最新文章

  1. 「AlphaGo 之父」David Silver最新演讲,传授强化学习的十大原则
  2. 2018技术卓越奖发布 阿里云数据库POLARDB获最佳创新产品奖
  3. Python学习笔记:面向对象高级编程(中上)
  4. maven 中 部署构件至Nexus(mvn deploy)
  5. JDK源码解析之 Java.lang.Double
  6. opencv 基本绘图功能 画直线 画圆 给图像添加文字等
  7. ubuntu下安装程序的三种方法
  8. 数字系统设计与制作报告——双向流水灯控制电路
  9. 大学计算机系最努力的同学都是如何学习的?
  10. 淘宝商品详情API接口(商品描述信息查询接口)
  11. Win11怎么关闭开机自启动软件
  12. 电脑键盘部分按键失灵_笔记本电脑部分按键失灵,可能的原因有哪些?
  13. 计算log以二为底的x用计算机,log以二为底x>1的解法
  14. java heartbeat
  15. cleanmymac4.12最新版下载安装教程
  16. qt控件之qt中的控件QTableWidget的使用
  17. fatal: The remote end hung up unexpectedly解决方案
  18. 【项目设计】基于OneNet平台的心率监测系统 -嵌入式 -物联网
  19. 【Spring】AOP(二)自定义来实现AOP
  20. 后渗透利用sethc留下后门

热门文章

  1. 程序员每天加班到晚上12点,早上迟到几分钟被领导批:价值观不符
  2. 夏天晚上睡觉点蚊香对身体有害?+几招防蚊、驱蚊办法
  3. 安装win10,刻录U盘,还原刻录的U盘
  4. 石英晶体谐振器的功能有哪些
  5. 电路方案分析(八)Type-C 端口短路保护参考设计
  6. 改编的一个屏幕保护程序
  7. 记录一次小程序滚动穿透解决方案
  8. css创建鼠标悬停下拉菜单样式
  9. 如何一台服务器虚拟多人用,使用服务器如何实现多台虚拟主机
  10. SpringMVC通过ResponseEntity实现文件下载