首页 技术 正文
技术 2022年11月12日
0 收藏 832 点赞 4,582 浏览 1829 个字

传送门

简单树上操作。

先转边权为点权。

显然所有的询问操作对应的路径会有一些交点,那么我们可以直接二分答案,对于所有大于二分值的询问用树上差分维护,最后dfs一遍每个点被覆盖了几次,当前情况合法当且仅当被覆盖次数与大于二分值的询问数相同且点权值可以使跟二分值相比差最大的询问合法。

代码:

#include<bits/stdc++.h>#define N 300005using namespace std;inline int read(){int ans=0;char ch=getchar();while(!isdigit(ch))ch=getchar();while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();return ans;}int n,m,first[N],cnt=0,dis[N],fa[N],top[N],tim[N],dep[N],siz[N],hson[N],val[N],tot=0;struct edge{int v,next,w;}e[N<<1];struct Q{int u,v,t,w;}q[N<<1];inline void add(int u,int v,int w){e[++cnt].v=v,e[cnt].next=first[u],e[cnt].w=w,first[u]=cnt;}inline void dfs1(int p){siz[p]=1;for(int i=first[p];i;i=e[i].next){int v=e[i].v;if(v==fa[p])continue;dis[v]=e[i].w+dis[p],val[v]=e[i].w,fa[v]=p,dep[v]=dep[p]+1,dfs1(v),siz[p]+=siz[v];if(siz[v]>siz[hson[p]])hson[p]=v;}}inline void dfs2(int p,int tp){top[p]=tp;if(!hson[p])return;dfs2(hson[p],tp);for(int i=first[p];i;i=e[i].next){int v=e[i].v;if(v!=hson[p]&&v!=fa[p])dfs2(v,v);}}inline void dfs3(int p){for(int i=first[p];i;i=e[i].next){if(e[i].v==fa[p])continue;dfs3(e[i].v),tim[p]+=tim[e[i].v];}}inline void update(int i){++tim[q[i].u],++tim[q[i].v],tim[q[i].t]-=2;}inline int lca(int x,int y){while(top[x]!=top[y]){if(dep[top[x]]<dep[top[y]])swap(x,y);x=fa[top[x]];}return dep[x]<dep[y]?x:y;}inline bool check(int mid){int mx=0,pot=0;memset(tim,0,sizeof(tim));for(int i=1;i<=m;++i)if(q[i].w>mid)update(i),mx=max(mx,q[i].w-mid),++pot;dfs3(1);for(int i=1;i<=n;++i)if(tim[i]>=pot&&val[i]>=mx)return true;return false;}int main(){n=read(),m=read();for(int i=1;i<n;++i){int u=read(),v=read(),w=read();add(u,v,w),add(v,u,w);}dfs1(1),dfs2(1,1);int l=0,r=0,ans=0;for(int i=1;i<=m;++i){q[i].u=read(),q[i].v=read();q[i].t=lca(q[i].u,q[i].v),q[i].w=dis[q[i].u]+dis[q[i].v]-2*dis[q[i].t],r=max(r,q[i].w);}while(l<=r){int mid=l+r>>1;if(check(mid))r=mid-1,ans=mid;else l=mid+1;}printf("%d",ans);return 0;}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,905
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,430
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,727