写这么长了不A有点舍不得。。

想A又调不出来。。

于是乎就存一下..

屠龙宝刀点击就送

#include <cstdio>
#include <vector>
#define N 205000
using namespace std;
vector<int>Graph[N];
int max(int a,int b) {return a>b?a:b;}
int min(int a,int b) {return a>b?b:a;}
int Pri[N],n,m,dep[N],dad[N][25],Max[N][25],Min[N][25],up[N][25],down[N][25];
void dfs(int x)
{dep[x]=dep[dad[x][0]]+1;for(int i=0;dad[x][i];++i){Max[x][i+1]=max(Max[x][i],Max[dad[x][i]][i]);Min[x][i+1]=min(Min[x][i],Min[dad[x][i]][i]);up[x][i+1]=max(up[x][i],Max[dad[x][i]][i]-Min[x][i]);up[x][i+1]=max(up[x][i],up[dad[x][i]][i]);down[x][i+1]=max(down[x][i],down[dad[x][i]][i]);down[x][i+1]=max(down[x][i],Max[x][i]-Min[dad[x][i]][i]);dad[x][i+1]=dad[dad[x][i]][i];}for(int i=0;i<Graph[x].size();++i){int v=Graph[x][i];if(dad[x][0]!=v){dad[v][0]=x;Max[v][0]=max(Pri[x],Pri[v]);Min[v][0]=min(Pri[x],Pri[v]);up[v][0]=max(0,Pri[x]-Pri[v]);down[v][0]=min(0,Pri[v]-Pri[x]);dfs(v);}}
}
int lca(int x,int y)
{if(dep[x]>dep[y]) swap(x,y);for(int i=20;i>=0;--i)if(dep[dad[y][i]]>=dep[x]) y=dad[y][i];if(x==y) return x;for(int i=20;i>=0;--i)if(dad[y][i]!=dad[x][i]) x=dad[x][i],y=dad[y][i];return dad[x][0];
}
int Up(int x,int y)
{int ret=0,Minn=0x7fffffff;if(dep[x]>dep[y]) swap(x,y);for(int i=20;i>=0;--i){if(dep[dad[y][i]]>=dep[x]){ret=max(ret,up[y][i]);ret=max(ret,Max[y][i]-Minn);Minn=min(Minn,Min[y][i]);y=dad[y][i];}}if(x==y) return ret;for(int i=20;i>=0;--i){if(dad[y][i]!=dad[x][i]){ret=max(ret,max(up[y][i],up[x][i]));ret=max(ret,max(Max[y][i]-Minn,Max[x][i]-Minn));Minn=min(Minn,min(Min[y][i],Min[x][i]));y=dad[y][i];x=dad[x][i];}}return ret;
}
int Down(int x,int y)
{int ret=0,Maxn=0;if(dep[x]>dep[y]) swap(x,y);for(int i=20;i>=0;--i){if(dep[dad[y][i]]>=dep[x]){ret=min(ret,down[y][i]);ret=min(ret,Maxn-Min[y][i]);Maxn=max(Maxn,Max[y][i]);y=dad[y][i];}}if(x==y) return ret;for(int i=20;i>=0;--i){if(dad[y][i]!=dad[x][i]){ret=min(ret,min(down[y][i],down[x][i]));ret=min(ret,min(Maxn-Min[y][i],Maxn-Min[x][i]));Maxn=max(Maxn,max(Max[y][i],Max[x][i]));y=dad[y][i];x=dad[x][i];}}return ret;
}
int query_max(int x,int y)
{if(dep[x]>dep[y]) swap(x,y);int ret=Pri[y];for(int i=20;i>=0;--i){if(dep[dad[y][i]]>=dep[x]){ret=max(ret,Max[y][i]);y=dad[y][i];}}if(x==y) return ret;for(int i=20;i>=0;--i){if(dad[y][i]!=dad[x][i]){ret=max(ret,Max[x][i]);ret=max(ret,Max[y][i]);x=dad[x][i];y=dad[y][i];}}return ret;
}
int query_min(int x,int y)
{if(dep[x]>dep[y]) swap(x,y);int ret=Pri[y];for(int i=20;i>=0;--i){if(dep[dad[y][i]]>=dep[x]){ret=min(ret,Min[y][i]);y=dad[y][i];}}if(x==y) return ret;for(int i=20;i>=0;--i){if(dad[y][i]!=dad[x][i]){ret=min(ret,Min[x][i]);ret=min(ret,Min[y][i]);x=dad[x][i];y=dad[y][i];}}return ret;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;++i) scanf("%d",&Pri[i]);for(int x,y,i=1;i<n;++i){scanf("%d%d",&x,&y);Graph[x].push_back(y);Graph[y].push_back(x);  }dfs(1);scanf("%d",&m);for(int x,y;m--;){scanf("%d%d",&x,&y);if(x==y) {puts("0");continue;} int z=lca(x,y),ans=0;ans=max(ans,Up(x,z));ans=max(ans,Down(y,z));ans=max(ans,query_max(x,z)-query_min(y,z));printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/ruojisun/p/7400714.html

(WWWWWWWWWW)codevs 3305 水果姐逛水果街Ⅱ相关推荐

  1. 【codevs3304】水果姐逛水果店Ⅰ,线段树练习

    水果姐逛水果街Ⅰ 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 水果姐今天心情不错,来到了水果街. 水果街有n家水果店 ...

  2. JAVA javaweb JSP水果管理系统源码(水果进销存管理系统水果管理系统(水果进销存)

    JSP水果管理系统源码(水果进销存管理系统水果管理系统(水果进销存) 常见的Javaweb题材有 理财系统,就业管理系统,汽车租赁,简易网盘,疫情数据查看,在线招标房,屋租赁,教务管理,医院管理,餐厅 ...

  3. PHP水果店管理系统,水果店连锁店管理系统实现一体化功能

    现在的人们越来越注重养生,特别是饮食养生那么水果就成为了客户的首选之一,随着水果的市场需求越来越大,想开水果店的创业者越来越多,连锁水果店我们看到的店面也越来越多,由于季节或者是时间的问题会很容易导致 ...

  4. www.biubiujie.com BiuBiu街-要Beautiful的女孩纸逛的街

    BiuBiu街-要Beautiful的女孩纸逛的街 biubiu街是百万mm一起修炼变美的购物社区.各路扮美达人与你分享美人心计.购物经验.搭配秘笈.当红好店,记录你的美丽成长.快来biubiu街说需 ...

  5. 水果店圈子:水果店坏水果应该怎么处理,水果店卖剩下的水果如何处理

    这里是水果店老板同行共享圈子,持续分享,帮助新手入门. 1.有想法要去执行 水果店想到了就去做,做的当中会遇到问题,问题就慢慢想办法解决,最主要是要行动起来 .这世上没有100%的绝对,不可能有一个办 ...

  6. 水果数据集(Fruit-Dataset )+水果分类识别训练代码(支持googlenet, resnet, inception_v3, mobilenet_v2)

    水果数据集(Fruit-Dataset )+水果分类识别训练代码(支持googlenet, resnet, inception_v3, mobilenet_v2) 目录 Fruit-Dataset水果 ...

  7. 基于java的水果商城系统 水果销售系统

    水果销售商城平台的实现可以使客户足不出户就能了解各种水果信息,比较商品的价格,营养价值等,轻松方便购买本文以Java+ssm+jsp+mysql为开发技术,实现了一个水果销售管理网站 .水果销售管理网 ...

  8. android水果APP应用,水果百科知识大全软件下载-水果百科appv2.1.9 安卓版-腾牛安卓网...

    水果百科app是一款非常不错的手机查询水果信息的软件,这里录入了非常丰富的水果信息,在这里可以查询各个水果的百科信息,获取许多水果的详细内容,积累更多的知识,有需要的小伙伴赶紧来下载吧! 水果百科ap ...

  9. android水果APP应用,水果视频-水果视频app安卓版下载-游侠软件下载

    水果视频是一款影视播发器app软件应用,海量视频在线观看,丰富福利精彩不停,网罗全网海量资源,感兴趣的小伙伴快来下载水果视频体验吧. 水果视频特色 1.所有的短视频在线关注都是无需你花钱的,也不会消耗 ...

最新文章

  1. mongoose的基本使用
  2. keras从入门到放弃(十二)卷积神经网络
  3. GIT Windows服务端搭建笔记
  4. json string 格式_自己动手实现一个简单的JSON解析器
  5. linux python 信号,Python模块之信号(signal)
  6. Python库大全,建议收藏留用!
  7. vscode新建文件的快捷键_Mac怎么创建txt文件?如何设置新建txt的快捷键?
  8. matlab程序约束条件,求Xij中i,j约束条件下的程序
  9. Java-LockSupport
  10. 手机忽然就安装不了东西,就是下载好apk打开后按不了安装。怎么处理?
  11. 碧蓝航线维护服务器时间,碧蓝航线3月21日维护时间更新公告 新增与更改内容介绍...
  12. 深度学习笔记_基本概念_卷积网络中的通道channel、特征图feature map、过滤器filter和卷积核kernel
  13. 头歌平台-人工智能之AlphaBeta剪枝算法
  14. SSM(Spring+SpringMVC+Mybatis) 整合
  15. 如何理解总体标准差、样本标准差与标准误
  16. Anaconda安装keras教程
  17. 网络密码破解的十个方法
  18. Characterizing, exploiting, and detecting DMA code injection vulnerabilities,Eurosys2021
  19. Thread.sleep(0)到底是个什么骚操作?
  20. R 语言将数据的 jan 换为 1

热门文章

  1. Linux系统安装管理
  2. 为什么成员属性不会被重写
  3. Swift实现OC中的单例模式
  4. Cookie、Session和Storage
  5. LNMP环境--搭建Discuz论坛
  6. 浏览器滚动的详细解释 Vue 固定滚动位置的实现
  7. 浅谈-LINUX 操作系统启动过程
  8. windows多线程同步互斥--总结
  9. java反射技术_java反射技术,逆向开发必备技能
  10. php 如何设置后台,phpcms怎么重新设置后台网址