[luogu4315]月下“毛景树”

luogu

联赛前复习一发树剖.不会告诉你WA了4发

#define ls x<<1,l,mid
#define rs x<<1|1,mid+1,r
#include<bits/stdc++.h>
using namespace std;
const int _=1e5+5;
int re(){
int x=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*w;
}
int n,cnt,ans,ts;
int mx[_<<2],tag[_<<2],cov[_<<2];
int h[_],dfn[_],val[_],son[_],id[_],sz[_],fa[_],dep[_],t[_],f[_];
struct edge{int to,next,w,id;}e[_<<1];
void link(int u,int v,int w,int id){
e[++cnt]=(edge){v,h[u],w,id};h[u]=cnt;
e[++cnt]=(edge){u,h[v],w,id};h[v]=cnt;
}
void dfs(int u){
sz[u]=1;
for(int i=h[u];i;i=e[i].next){
int v=e[i].to;
if(v==fa[u])continue;
fa[v]=u;dep[v]=dep[u]+1;f[e[i].id]=v;
dfs(v);sz[u]+=sz[v];val[v]=e[i].w;
if(sz[v]>sz[son[u]])son[u]=v;
}
}
void dfs(int u,int tp){
t[u]=tp;dfn[u]=++ts;id[ts]=u;
if(son[u])dfs(son[u],tp);
for(int i=h[u];i;i=e[i].next){
int v=e[i].to;
if(v^son[u]&&v^fa[u])dfs(v,v);
}
}
void pu(int x){mx[x]=max(mx[x<<1],mx[x<<1|1]);}
void pt(int x,int v){mx[x]+=v;tag[x]+=v;}
void cv(int x,int v){mx[x]=v;cov[x]=v;tag[x]=0;}
void pd(int x){
if(cov[x])cv(x<<1,cov[x]),cv(x<<1|1,cov[x]),cov[x]=0;
if(tag[x])pt(x<<1,tag[x]),pt(x<<1|1,tag[x]),tag[x]=0;
}
void bu(int x,int l,int r){
if(l==r){mx[x]=val[id[l]];return;}
int mid=l+r>>1;bu(ls);bu(rs);pu(x);
}
void mem(int x,int l,int r,int ql,int qr,int v){
if(ql<=l&&r<=qr){cv(x,v);return;}pd(x);
int mid=l+r>>1;if(ql<=mid)mem(ls,ql,qr,v);
if(qr>mid)mem(rs,ql,qr,v);pu(x);
}
void add(int x,int l,int r,int ql,int qr,int v){
if(ql<=l&&r<=qr){pt(x,v);return;}pd(x);
int mid=l+r>>1;if(ql<=mid)add(ls,ql,qr,v);
if(qr>mid)add(rs,ql,qr,v);pu(x);
}
int qmax(int x,int l,int r,int ql,int qr){
if(ql<=l&&r<=qr)return mx[x];pd(x);int mid=l+r>>1;
int res=-1e9;if(ql<=mid)res=qmax(ls,ql,qr);
if(qr>mid)res=max(res,qmax(rs,ql,qr));return res;
}
void solve(int u,int v,int w,int o){
while(t[u]^t[v]){
if(dep[t[u]]<dep[t[v]])swap(u,v);
if(o==1)add(1,1,n,dfn[t[u]],dfn[u],w);
if(!o)mem(1,1,n,dfn[t[u]],dfn[u],w);
if(o==2)ans=max(ans,qmax(1,1,n,dfn[t[u]],dfn[u]));
u=fa[t[u]];
}
if(u==v)return;
if(dep[u]<dep[v])swap(u,v);
if(o==1)add(1,1,n,dfn[v]+1,dfn[u],w);
if(!o)mem(1,1,n,dfn[v]+1,dfn[u],w);
if(o==2)ans=max(ans,qmax(1,1,n,dfn[v]+1,dfn[u]));
}
int main(){
n=re();
for(int i=1,u,v,w;i<n;i++){
u=re(),v=re(),w=re();
link(u,v,w,i);
}
dfs(1);dfs(1,1);bu(1,1,n);
char op[8];int u,v;
while(1){
scanf("%s",op);
if(op[1]=='t')break;
u=re(),v=re();
if(op[1]=='o')solve(u,v,re(),0);
if(op[1]=='d')solve(u,v,re(),1);
if(op[1]=='a'){ans=-1e9;solve(u,v,0,2);printf("%d\n",ans);}
if(op[1]=='h')mem(1,1,n,dfn[f[u]],dfn[f[u]],v);
}
return 0;
}

[luogu4315]月下“毛景树”的更多相关文章

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

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

  2. [BZOJ1984][Luogu4315]月下“毛景树”

    题目大意 给出一棵 n 个点的无根树,待边权,要求维护一下操作: 修改某条边的边权 修改点 u 到点 v 路径上所有边的边权 点 u 到点 v 路径上所有边的边权加上某个值 查询点 u 到点 v 路径 ...

  3. BZOJ 1984: 月下“毛景树” [树链剖分 边权]

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1728  Solved: 531[Submit][Status][Discu ...

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

    [BZOJ1984]月下"毛景树" Description 毛毛虫经过及时的变形,最终逃过的一劫,离开了菜妈的菜园. 毛毛虫经过千山万水,历尽千辛万苦,最后来到了小小的绍兴一中的校 ...

  5. 【BZOJ-1984】月下“毛景树” 树链剖分

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1314  Solved: 416[Submit][Status][Discu ...

  6. Bzoj 1984: 月下“毛景树” 树链剖分

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1282  Solved: 410[Submit][Status][Discu ...

  7. BZOJ1984: 月下“毛景树”

    1984: 月下“毛景树” Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 713  Solved: 245[Submit][Status] Descri ...

  8. P4315 月下“毛景树”

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

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

    P4315 月下"毛景树"(树链剖分) 题面 简述: 边权转点权(在dfs1处转换) 把一条边权赋值在深度更深的上 需要实现对单边权的染色 , 路径边权的染色 , 路径边权的增加 ...

随机推荐

  1. Sending SMS And Dialing Numbers without User Consent(Context is not needed)

    Sending SMS And Dialing Numbers without User Consent Sending SMS does not require context or user in ...

  2. httpModules 与 httpHandlers

    ASP.NET对请求处理的过程:当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给ASPNET_ISAPI.dll,AS ...

  3. hdu 2871 Memory Control(线段树)

    题目链接:hdu 2871 Memory Control 题目大意:模拟一个内存分配机制. Reset:重置,释放全部空间 New x:申请内存为x的空间,输出左地址 Free x:释放地址x所在的内 ...

  4. 工作总结 错误 using 块缺少结束字符“}”。请确保此块内的所有“{”都有匹配的“}”字符,并且任何“}”都不会解释为标记。

    页面上 有两个 它会跟标签 匹配的     标准要在同一级别下 什么也不改变 只改变它们位置 就不报错了 总结 @using (Html.BeginForm()) { } 要根据标签位置 匹配  要放 ...

  5. php序列化&反序列化坑

    一: 在php中如果我们统一编码是没有什么问题了,但是很多朋友会发现一个问题就是utf8和gbk编码中返回的值会有所区别: php 在utf8和gbk编码下使用serialize和unserializ ...

  6. PHP利用GD库绘图和生成验证码图片

    首先得确定php.ini设置有没有打开GD扩展功能,測试例如以下 print_r(gd_info()); 假设有打印出内容例如以下,则说明GD功能有打开: Array ( [GD Version] = ...

  7. MQTT服务器搭建--Apollo

    尊重原创,我是伸手党:https://blog.csdn.net/u012377333/article/details/68943416 1.Apollo下载 下载地址:http://activemq ...

  8. Ubuntu 16.04 安装opencv的各种方法(含opencv contrib扩展包安装方法)

    Ubuntu 16.04 安装opencv的各种方法(含opencv contrib扩展包安装方法) https://blog.csdn.net/ksws0292756/article/details ...

  9. centos7 中文输入法设置

    安装centos7 后,他有自带的中文输入法安装包找到 applications->systemTools->settings->region&language 2:在 in ...

  10. SpringMvc入门教程

    1.新建demo4  web项目, 导入spring包(使用的是spring4.2) 2.修改WEB-INF下的WEB.XML内容为 <?xml version="1.0" ...