传送门

果然强校出的题都有坑= =
好吧其实是我太弱
都知道化边权为点权了还没发现链上查询和修改时的坑
知道了这个这题就是板子题了= =

CODE:

#include<cstdio>
#include<vector>
using namespace std;
#define N 100005
struct tree
{int num,change,plus;
}t[N<<2];
int f[N],deep[N],size[N],son[N],top[N],pos[N],s[N],point[N],num[N];
char str[10];
int n,m,x,y,z,tot;
vector<int> v[N],w[N],id[N];
inline int max(const int &a,const int &b){return a>b?a:b;}
inline int min(const int &a,const int &b){return a<b?a:b;}
inline void swap(int &a,int &b){a^=b,b^=a,a^=b;}
inline int read()
{int n=0;char c=getchar();while(c<'0'||c>'9') c=getchar();while(c>='0'&&c<='9') n=(n<<3)+(n<<1)+c-48,c=getchar();return n;
}
inline bool getstring()
{char c=getchar();int p=0;while(c<'A'||c>'Z') c=getchar();str[0]=c,c=getchar();while(c>='a'&&c<='z') str[++p]=c,c=getchar();return str[0]!='S';
}
void dfs(int now,int fa,int depth)
{f[now]=fa,deep[now]=depth;size[now]=1;int tmp=0,top=v[now].size();for(int i=0,to=v[now][0];i<top;to=v[now][++i])if(to!=fa){s[to]=w[now][i],point[id[now][i]]=to;dfs(to,now,depth+1);size[now]+=size[to];if(size[to]>tmp) tmp=size[to],son[now]=to;}
}
void dfs2(int now,int high)
{top[now]=high,pos[now]=++tot;num[tot]=s[now];if(son[now]) dfs2(son[now],high);int top=v[now].size();for(int i=0,to=v[now][0];i<top;to=v[now][++i])if(to!=f[now]&&to!=son[now]) dfs2(to,to);
}
inline void pushdown(int now)
{if(!t[now].change&&!t[now].plus) return;int s1=now<<1,s2=now<<1|1;if(t[now].change){t[s1].change=t[s2].change=t[s1].num=t[s2].num=t[now].change;t[s1].plus=t[s2].plus=0;t[now].change=0;}if(t[now].plus){t[s1].num+=t[now].plus,t[s2].num+=t[now].plus;t[s1].plus+=t[now].plus,t[s2].plus+=t[now].plus;t[now].plus=0;}
}
inline void update(int now)
{t[now].num=max(t[now<<1].num,t[now<<1|1].num);
}
void build(int l,int r,int now)
{if(l==r){t[now].num=num[l];return;}int mid=(l+r)>>1;build(l,mid,now<<1);build(mid+1,r,now<<1|1);update(now);
}
void add(int L,int R,int l,int r,int now,int num)
{if(L<=l&&r<=R){t[now].plus+=num,t[now].num+=num;return;}int mid=(l+r)>>1;pushdown(now);if(L<=mid) add(L,R,l,mid,now<<1,num);if(R>mid) add(L,R,mid+1,r,now<<1|1,num);update(now);
}
void change(int L,int R,int l,int r,int now,int num)
{if(L<=l&&r<=R){t[now].change=t[now].num=num,t[now].plus=0;return;}int mid=(l+r)>>1;pushdown(now);if(L<=mid) change(L,R,l,mid,now<<1,num);if(R>mid) change(L,R,mid+1,r,now<<1|1,num);update(now);
}
int ask(int L,int R,int l,int r,int now)
{if(L<=l&&r<=R) return t[now].num;int mid=(l+r)>>1,ans=0;pushdown(now);if(L<=mid) ans=ask(L,R,l,mid,now<<1);if(R>mid) ans=max(ans,ask(L,R,mid+1,r,now<<1|1));return ans;
}
inline void addpath(int x,int y,int z)
{for(;top[x]!=top[y];x=f[top[x]]){if(deep[top[x]]<deep[top[y]]) swap(x,y);add(pos[top[x]],pos[x],1,n,1,z);}if(x==y) return;if(deep[x]>deep[y]) swap(x,y);int tmp=ask(pos[x],pos[x],1,n,1);add(pos[x],pos[y],1,n,1,z);change(pos[x],pos[x],1,n,1,tmp);
}
inline void changepath(int x,int y,int z)
{for(;top[x]!=top[y];x=f[top[x]]){if(deep[top[x]]<deep[top[y]]) swap(x,y);change(pos[top[x]],pos[x],1,n,1,z);}if(x==y) return;if(deep[x]>deep[y]) swap(x,y);int tmp=ask(pos[x],pos[x],1,n,1);change(pos[x],pos[y],1,n,1,z);change(pos[x],pos[x],1,n,1,tmp);
}
inline int askpath(int x,int y)
{change(1,1,1,n,1,0);int ans=0;for(;top[x]!=top[y];x=f[top[x]]){if(deep[top[x]]<deep[top[y]]) swap(x,y);ans=max(ans,ask(pos[top[x]],pos[x],1,n,1));}if(x==y) return ans;if(deep[x]>deep[y]) swap(x,y);int tmp=ask(pos[x],pos[x],1,n,1);change(pos[x],pos[x],1,n,1,0);ans=max(ans,ask(pos[x],pos[y],1,n,1));change(pos[x],pos[x],1,n,1,tmp);return ans;
}
int main()
{n=read();for(int i=1;i<n;i++)x=read(),y=read(),z=read(),v[x].push_back(y),v[y].push_back(x),w[x].push_back(z),w[y].push_back(z),id[x].push_back(i),id[y].push_back(i);dfs(1,0,1),dfs2(1,1),build(1,n,1);while(getstring()){x=read(),y=read();if(str[1]=='h') change(pos[point[x]],pos[point[x]],1,n,1,y);else if(str[1]=='o') changepath(x,y,read());else if(str[1]=='d') addpath(x,y,read());else printf("%d\n",askpath(x,y));}return 0;
}

发这题的题解就是为了提醒自己:一定要随时注意题目中的坑点以及出题人的良♂苦用心!

bzoj1984 月下“毛景树”相关推荐

  1. [bzoj1984]月下“毛景树” 树链剖分

    1984: 月下"毛景树" Time Limit: 20 Sec  Memory Limit: 64 MB [Submit][Status][Discuss] Descriptio ...

  2. BZOJ1984: 月下“毛景树”

    BZOJ 1984: 月下"毛景树" Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 1583  Solved: 500 [Subm ...

  3. [BZOJ1984] 月下“毛景树”

    Description 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里.爬啊爬~爬啊爬~~毛毛虫爬到了一颗小小的" ...

  4. 树剖+线段树||树链剖分||BZOJ1984||Luogu4315||月下“毛景树”

    题面:月下"毛景树" 题解:是道很裸的树剖,但处理的细节有点多(其实是自己线段树没学好).用一个Dfs把边权下移到点权,用E数组记录哪些边被用到了:前三个更新的操作都可以合并起来, ...

  5. P4315 月下“毛景树” (树链剖分)

    题目链接: P4315 月下"毛景树" 大致题意 给定一棵由nnn个节点的树, 由n−1n - 1n−1带权边构成. 有如下444种操作: Change k c: 把第kkk条边的 ...

  6. 洛谷P4315 月下“毛景树” 题解

    洛谷P4315 月下"毛景树" 题解 题目链接:P4315 月下"毛景树" 题意:请维护一个数据结构,支持 改第 kkk 条边的边权 结点 uuu 到 vvv ...

  7. 洛谷P4315 月下“毛景树”

    题目描述 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校园里. 爬啊爬~爬啊爬毛毛虫爬到了一颗小小的"毛景树&quo ...

  8. bzoj 1984: 月下“毛景树” 线段树+树链剖分

    题意 给出一棵n个节点的树,每条边都有权值,要求资瓷以下操作: Max x y表示查询x到y之间的最大权值 Cover x y z表示把x到y的权值赋为z Change x y表示把第x条边的权值变成 ...

  9. 【洛谷P4315】月下“毛景树”(树链剖分)

    这是一道毒瘤题. 首先题目中给的是边权而不是点权,但是我们把边权移到点上就行了 但是要注意,之后我们修改u,v两点之间的路径时,就不要修改他们的lca,以及当要修改单边的时候,把边的编号*2(因为是双 ...

  10. 洛谷 P4315 月下“毛景树”(边树剖)

    题目不算难,但是代码量需要控制 主要说一下线段树上的操作,因为有两个相关的区间操作标记,应该先覆盖后增加,因为覆盖操作会影响增加操作 const int N=1e5+5;int n,m;int i,j ...

最新文章

  1. 在线作图|小基因组——线粒体基因组圈图
  2. SQL表内查重和删重
  3. 十八、彻底掌握金融量化交易库Tushare
  4. 每天一小时python官方文档学习(五)————数据结构之元组、集合与字典
  5. QtJava笔记-Qt与Java进行SSL双向认证(Qt服务端,Java客户端)
  6. numpy 数据类型与 Python 原生数据类型
  7. 视频怎么插入慢动作?
  8. rhel6上使用udev配置oracle asm,在RHEL6上用UDEV配置ASM
  9. 【java】监听器的使用
  10. 剑指offer——复习1:二叉树三种遍历方式的迭代与递归实现
  11. 联想微型计算机 y720,助你全场超神 评联想拯救者Y720 Cube
  12. 手机还能做电路仿真啊!电子电路兴趣爱好者福音!
  13. 字母’x’在CSS世界中的角色和故事
  14. 如何下载中国卫星地图高清版大图
  15. 别人恃才自傲,你却虚怀若谷。——保持谦虚
  16. NLP-信息抽取-NER-2019:LGN【A Lexicon-Based Graph Neural Network for Chinese NER】
  17. 向工程腐化开炮|动态链接库so治理
  18. php网站视频播放外链,用视频网站来做外链只需三步
  19. dnw for linux
  20. 图片如何转PDF?这两种方法很好用

热门文章

  1. 计算机中怎样算2的21次方,脑筋急转弯:2的31次方与3的21次方哪个大?天才知道!...
  2. Mac电脑 如何在任意目录快速打开终端并定位到当前目录
  3. android硬件加速默认,Android的硬件加速
  4. java动态时钟_java实现动态时钟并设置闹钟功能
  5. 造车新势力回港:蔚来能重拾“老大哥”头衔吗?
  6. 大数据可视化的价值意义
  7. 遗传算法详解(GA)(个人觉得很形象,很适合初学者)
  8. 资产配置(理论+模型),科学找圣杯
  9. 项目经理和技术主管的分工
  10. 什么是工业机器人,工业机器人的分类与特点