P2590-[ZJOI2008]树的统计【树链剖分,线段树】

正题


题目大意

一棵带权树,要求单点修改,路径求和和路径求最大值。


解题思路

先来一个树链剖分,然后线段树维护。


codecodecode

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=31000;
int tot,cnt,n,m,ls[N],pw[N],id[N];
int siz[N],dep[N],f[N],son[N],seg[N],top[N];
struct treenode{int l,r,maxs,val;
};
struct LineTree{treenode t[N*4];void build(int x,int l,int r){t[x].l=l;t[x].r=r;if(l==r){t[x].val=t[x].maxs=pw[id[l]];return;}int mid=(l+r)>>1;build(x*2,l,mid);build(x*2+1,mid+1,r);t[x].val=t[x*2].val+t[x*2+1].val;t[x].maxs=max(t[x*2].maxs,t[x*2+1].maxs);}void Change(int x,int k,int num){if(t[x].l==t[x].r){t[x].val=t[x].maxs=num;return;}int mid=(t[x].l+t[x].r)/2;if(k<=mid) Change(x*2,k,num);else Change(x*2+1,k,num);t[x].val=t[x*2].val+t[x*2+1].val;t[x].maxs=max(t[x*2].maxs,t[x*2+1].maxs);}int Fine_sum(int x,int l,int r){if(t[x].l==l&&t[x].r==r)return t[x].val;int mid=(t[x].l+t[x].r)>>1;if(r<=mid) return Fine_sum(x*2,l,r);else if(l>mid) return Fine_sum(x*2+1,l,r);else return Fine_sum(x*2,l,mid)+Fine_sum(x*2+1,mid+1,r);    }int Fine_maxs(int x,int l,int r){if(t[x].l==l&&t[x].r==r)return t[x].maxs;int mid=(t[x].l+t[x].r)>>1;if(r<=mid) return Fine_maxs(x*2,l,r);else if(l>mid) return Fine_maxs(x*2+1,l,r);else return max(Fine_maxs(x*2,l,mid),Fine_maxs(x*2+1,mid+1,r));    }
}LT;
struct edge_node{int to,next;
}a[N*2];
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void dfs1(int x,int fa)
{siz[x]=1;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa) continue;dep[y]=dep[x]+1;f[y]=x;dfs1(y,x);siz[x]+=siz[y];if(siz[y]>siz[son[x]])son[x]=y;}
}
void dfs2(int x,int fa)
{seg[x]=++cnt;id[cnt]=x;if(son[x]){top[son[x]]=top[x];dfs2(son[x],x);}for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(y==fa||y==son[x]) continue;top[y]=y;dfs2(y,x);}
}
int path_ask_sum(int x,int y)
{int ans=0;while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]]) swap(x,y);ans+=LT.Fine_sum(1,seg[top[x]],seg[x]);x=f[top[x]];}if(dep[x]>dep[y]) swap(x,y);ans+=LT.Fine_sum(1,seg[x],seg[y]);return ans;
}
int path_ask_maxs(int x,int y)
{int ans=-2147483647;while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]]) swap(x,y);ans=max(ans,LT.Fine_maxs(1,seg[top[x]],seg[x]));x=f[top[x]];}if(dep[x]>dep[y]) swap(x,y);ans=max(ans,LT.Fine_maxs(1,seg[x],seg[y]));return ans;
}
int main()
{scanf("%d",&n);for(int i=1;i<n;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}for(int i=1;i<=n;i++)scanf("%d",&pw[i]);dfs1(1,0);top[1]=1;dfs2(1,0);LT.build(1,1,n);scanf("%d",&m);for(int i=1;i<=m;i++){char c[10];int u,v;scanf("%s%d%d",c,&u,&v);if(c[1]=='H') LT.Change(1,seg[u],v);else if(c[1]=='M') printf("%d\n",path_ask_maxs(u,v));else printf("%d\n",path_ask_sum(u,v));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git合并分支的策略(赞)

假设当前有两个分支 master和test&#xff0c;两个分支一模一样&#xff0c;都有这三个文件 现在test添加一个test4.txt&#xff0c;然后提交到本地&#xff08;git add . git commit&#xff09; 切换到master分支上&#xff0c;git checkout master git merge test 这样mase…

mybatis源码阅读(二):mybatis初始化上

转载自 mybatis源码阅读(二)&#xff1a;mybatis初始化上 1.初始化入口 //Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与数据库进行交互 private static SqlSessionFactory getSessionFactory() {SqlSessionFactory sessionFactory null;String …

P1983-车站分级【图论,记忆化dfs,构图】

正题 题目链接:https://www.luogu.org/problemnew/show/P1983 题目大意 一个辆车会一个一个值xxx&#xff0c;如果等级大于等于xxx的车站都会停靠(包括起点和终点)。给每辆车的停靠点&#xff0c;求至少要将车站分多少级。 解题思路 对于一辆车&#xff0c;若一个点他经过了…

slot的使用

普通插槽 在嵌入的组件标签中加入内容&#xff0c;如果子组件中有slot就显示&#xff0c;否则就是不显示 父组件 <h1>Hello 父组件</h1> <Child><p>这是一些初始内容</p><p>这是更多的初始内容</p> </Child>子组件 <h1&…

mybatis源码阅读(三):mybatis初始化(下)mapper解析

转载自 mybatis源码阅读(三)&#xff1a;mybatis初始化&#xff08;下&#xff09;mapper解析 MyBatis 的真正强大在于它的映射语句&#xff0c;也是它的魔力所在。由于它的异常强大&#xff0c;映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比…

改造独立部署(SCD)模式下.NET Core应用程序 dotnet的exe文件启动过程

设置一个小目标 改造前 改造后 独立部署SCD模式&#xff0c;是指在使用dotnet publish 命令时带上-r 参数运行时标识符&#xff08;RID&#xff09;。 目标提出原因&#xff1a;SCD模式下文件太乱了&#xff0c;很多文件在开发时大多又涉及不到&#xff0c;发布后如果能把文件…

P1268-树的重量【图论】

正题 题目大意 一棵树有nnn个叶子节点&#xff0c;给出每两个叶子节点之间的距离。求这棵树的边权之和。 解题思路 我们考虑每次加入一个节点。两个节点时不用说。 加入第三个节点时&#xff0c;肯定是加入在节点1和节点2之间。 之后我们开始推导&#xff1a;当我们加入节点…

mybatis源码阅读(四):mapper(dao)实例化

转载自 mybatis源码阅读(四)&#xff1a;mapper(dao)实例化 在开始分析之前&#xff0c;先来了解一下这个模块中的核心组件之间的关系&#xff0c;如图&#xff1a; 1.MapperRegistry&MapperProxyFactory MapperRegistry是Mapper接口及其对应的代理对象工程的注册中心&…

ajax的封装使用

面试的时候有人问到我ajax的使用&#xff0c;当时回答的不算好&#xff0c;这里想重新总结下&#xff1a; 1、如何将配置等信息传到ajax函数里面去 这个采用的是在参数里加一个对象&#xff0c;对象里面放入字段&#xff0c;然后在ajax里设置一个option&#xff0c;通过option…

P3385-[模板]负环【SPFA】

正题 题目大意 求点1可不可以走到负环。 解题思路 用cnticnt_icnti​表示到iii的最短路经过了多少个点&#xff0c;然后求若cnti≥ncnt_i\geq ncnti​≥n且这条路是负数那么就有负环。 codecodecode #include<cstdio> #include<queue> #include<cstring> …

自定义路由匹配和生成

前言 前两篇文章主要总结了CMS系统两个技术点在ASP.NET Core中的应用&#xff1a; 《ASP.NET Core 中的SEO优化&#xff08;1&#xff09;&#xff1a;中间件实现服务端静态化缓存》 《ASP.NET Core 中的SEO优化&#xff08;2&#xff09;&#xff1a;中间件中渲染Razor视图》…

mybatis多个参数(不使用@param注解情况下),sql参数占位符正确写法

转载自 mybatis多个参数(不使用param注解情况下)&#xff0c;sql参数占位符正确写法 useActualParamName配置 useActualParamName允许使用方法签名中的名称作为语句参数名称。 为了使用该特性&#xff0c;你的工程必须采用Java 8编译&#xff0c;并且加上-parameters选项。&…

如何封装并发布一个属于自己的ui组件库

以前就一直有个想法自己能不能封装一个类似于elementui一样的组件库&#xff0c;然后发布到npm上去&#xff0c;毕竟前端说白了&#xff0c;将组件v上去&#xff0c;然后进行数据交互。借助这次端午&#xff0c;终于有机会&#xff0c;尝试自己去封装发布组件库了 我这里了只做…

P1768-天路【负环,SPFA,01分数规划,二分答案】

正题 题目链接:https://www.luogu.org/problemnew/show/P1768 题目大意 求一条回路使得路上∑vi∑pi\frac{\sum v_i}{\sum p_i}∑pi​∑vi​​最大。 解题思路 考虑01分数规划 ∑vi∑pians\frac{\sum v_i}{\sum p_i}ans∑pi​∑vi​​ans ∑vians∗∑pi\sum v_ians*\sum p_i…

听云支持.NET Core的应用性能监控

随着微软于2017年8月正式发布.NET Core 2.0&#xff0c; .NET Core 社区开始活跃&#xff0c;众多.NET开发者开始向跨平台转变。 听云于2017年11月推出了.NET Core应用监控工具&#xff0c;和听云其他语言的监控工具一样&#xff0c;.NET Core应用监控工具具有以下特征&#xf…

mybatis源码阅读(五) ---执行器Executor

转载自 mybatis源码阅读(五) ---执行器Executor 1. Executor接口设计与类结构图 public interface Executor {ResultHandler NO_RESULT_HANDLER null;// 执行update&#xff0c;delete&#xff0c;insert三种类型的sql语句int update(MappedStatement ms, Object parameter…

.sync的一个用法

面试时&#xff0c;有人问了我修饰符是什么&#xff0c;就是一个点后面加一个单词&#xff0c;我当时还以为是什么文件夹后缀呢。很是尴尬 这里主要学习下.sync的一个用法 假设下场景&#xff1a; 这里有一个父组件&#xff0c;父组件中有个money&#xff0c;需要传到子组件中…

nssl1296-猫咪的进化【dp】

正题 题目大意 nnn次&#xff0c;每次有3种选择&#xff1a; 休息获得viv_ivi​点价值获得vi2v_i^2vi2​点价值且下一回合要休息 解题思路 定义fi,0/1/2f_{i,0/1/2}fi,0/1/2​表示第iii次为休息/叫一声/叫两声时的最大价值。 fi,0f_{i,0}fi,0​可以由前面任何状态转移过来。 …

[52ABP实战系列] .NET CORE实战入门第三章更新了

早安 各位道友好&#xff0c;.NET CORE入门视频的第三章也算录制完毕了。欢迎大家上传课网进行学习。 更新速度 大家也知道最近的社会新闻比较多。频繁发生404、关键字打不出来&#xff0c;我个人也在关注这些事件。导致精力分散&#xff0c;没有做到稳定更新&#xff0c;现在呢…

如何安装nuxt

因为vue是单页面应用&#xff0c;所以不被Seo&#xff0c;如百度和Google抓取到&#xff0c;在Vue中如果想要爬虫爬到就必须使用nuxt 那么如何安装使用呢&#xff1f; yarn create nuxt-app <project-name> cd <project-name> yarn build yarn start必须先build&a…