JZOJ1230. Road (2017.8B组)
来源:互联网 发布:java timestamp long 编辑:程序博客网 时间:2024/06/07 04:56
Description
Z 国是一个拥有N 个岛的国家。这N 个岛用N-1 条桥来连接,且任意两个岛之间都可以互达。
某商人听说Z 国是一个很富有的国家,所以他想到Z 国闯一闯。经过他仔细的观察,他发现某样商品特别受欢迎,而且由于各岛之间沟通联系不够多,所以这样物品在每个岛的价格可能都不同。
Task:商人开始在编号为x 的岛上,然后他要走到编号为y 的岛上。在这期间,他可以在x 岛y 的路径上买一件商品,和卖一件商品。,注意,仅能买一件和卖一件!显然你要计算商人从岛x 到岛y 最多能赚多少钱。
Input
输入第一行有一个整数N(1≤n≤50000),表示Z 国有N 个岛。
接下来有N 行,每行一个整数Ci(1≤Ci≤50000),第N+i 行的Ci 表示商品在岛i 的价
格。
再接下来有N-1 行,每行两个整数x,y(1≤x,y≤50000),表示岛x 和岛y 之间有一条
桥。
接下来有一个整数M,表示有M 个询问。
然后M 行,每行两个整数,x,y(1≤x,y≤50000),表示询问你,商人从岛x 到岛y 最多
能赚多少钱?
Output
对于每次询问,如果商人能赚到钱,则输出最多能赚多少钱。
如果不能赚钱,就输出0(你可以这样理解——亏本生意谁都不会做^_^)
Sample Input
4
1
2
3
4
1 2
1 4
2 3
3
1 3
3 1
1 4
Sample Output
2
0
3
想法:
先用dfs求出每个点的深度,每个点的父亲
然后对于询问的x,y,求出它们的lca,然后把x–lca–y构成一个序列
贪心
如果最小值更新,最大值清空(大的值要在小的后面),如果最大值更新,用当前最大值-最小值更新答案
可以打倍增
- JZOJ1230. Road (2017.8B组)
- B. Road Construction
- B. Road Construction
- codeforce B. Road Construction
- Codeforces 330B Road Construction
- codeforces 330B Road Construction
- The Road to RAD (B) note
- cf 192 div2 B. Road Construction
- Codeforces Round 192 B. Road Construction
- Problem-330B-Ceodeforces Road Construction(思维)
- Codeforces Round #192 (Div. 2) (330B) B.Road Construction
- Design road (三分)
- road
- Road
- Road
- Road
- Road
- road
- 常量
- For-each循环优于for循环感悟
- [随心译]2017.8.10-随心译以后转到简书
- ZIGBEE 电源控制之中断唤醒
- Ubuntu获取GPS数据& 保存TXT
- JZOJ1230. Road (2017.8B组)
- Linux学习之错误与解决记录(持续更新)
- C++设计模式学习之单例
- 屏幕适配
- 每日MySQL之016:MySQL Server客户端工具-mysqladmin
- 【第二类斯特林数】HDU_2643_Rank
- 匿名内部类
- ZOJ 2042 Divisibility (DP)
- 递归和非递归分别实现strlen(C语言)