题意:给定一个N个节点的树,1<=N<=50000 每个节点都有一个权值,代表商品在这个节点的价格。商人从某个节点a移动到节点b,且只能购买并出售一次商品,问最多可以产生多大的利润。

思路:路径压缩,得到每个点到当前根的信息,然后更新即可。 有可以用倍增做。

很久前抄的代码。

#include<cstdio>
#define min(a,b) (a<b?a:b)
#define max(a,b) (a>b?a:b)
#define swap(a,b) (a^=b,b^=a,a^=b)
using namespace std;
const int mm=;
const int mn=;
int s[mm],t[mm],d[mm],p[mm],ans[mm];
int h[mn]={},q[mn]={},g[mn]={},f[mn],mx[mn],mi[mn],up[mn]={},dw[mn]={};
bool vis[mn]={};
int i,j,k,n,m,e;
inline void add(int u,int v,int c,int h[])
{
s[e]=u,t[e]=v,d[e]=c,p[e]=h[u],h[u]=e++;
s[e]=v,t[e]=u,d[e]=-c,p[e]=h[v],h[v]=e++;
}
int find(int x)
{
if(f[x]==x)return x;
int y=f[x];
f[x]=find(f[x]);
up[x]=max(mx[y]-mi[x],max(up[x],up[y]));
dw[x]=max(mx[x]-mi[y],max(dw[x],dw[y]));
mx[x]=max(mx[x],mx[y]);
mi[x]=min(mi[x],mi[y]);
return f[x];
}
void tarjan(int u)
{
int i,v,x,y;
vis[f[u]=u]=;
for(i=q[u];i;i=p[i])
if(vis[v=t[i]])
v=find(v),t[e]=i,p[e]=g[v],g[v]=e++;
for(i=h[u];i;i=p[i])
if(!vis[v=t[i]])tarjan(v),f[v]=u;
for(i=g[u];i;i=p[i])
{
v=t[i],x=s[v],y=t[v],find(x);
if(d[v]<)swap(x,y),v=-d[v];
else v=d[v];
ans[v]=max(mx[y]-mi[x],max(up[x],dw[y]));
}
}
inline void get(int &a)
{
char c;
while((c=getchar())<''||c>'');
for(a=;c>=''&&c<='';c=getchar())a=a*+c-'';
}
void out(int x)
{
if(x>)out(x/);
putchar(x%+'');
}
int main()
{
for(get(n),i=; i<=n; ++i)get(mx[i]),mi[i]=mx[i];
for(e=k=; k<n; ++k)get(i),get(j),add(i,j,,h);
for(get(m),k=; k<=m; ++k)get(i),get(j),add(i,j,k,q);
tarjan();
for(i=; i<=m; ++i)out(ans[i]),puts("");
return ;
}

POJ - 3728:The merchant (Tarjan 带权并查集)的更多相关文章

  1. POJ 1988 Cube Stacking( 带权并查集 )*

    POJ 1988 Cube Stacking( 带权并查集 ) 非常棒的一道题!借鉴"找回失去的"博客 链接:传送门 题意: P次查询,每次查询有两种: M x y 将包含x的集合 ...

  2. poj 1733 Parity game(带权并查集+离散化)

    题目链接:http://poj.org/problem?id=1733 题目大意:有一个很长很长含有01的字符串,长度可达1000000000,首先告诉你字符串的长度n,再给一个m,表示给你m条信息, ...

  3. POJ 1733 Parity game(离散化+带权并查集)

    离散化+带权并查集 题意:长度为n的0和1组成的字符串,然后问第L和R位置之间有奇数个1还是偶数个1. 根据这些回答, 判断第几个是错误(和之前有矛盾)的. 思路:此题同HDU 3038 差不多,询问 ...

  4. POJ 1988 Cube Stacking 【带权并查集】

    <题目链接> 题目大意: 有几个stack,初始里面有一个cube.支持两种操作: 1.move x y: 将x所在的stack移动到y所在stack的顶部. 2.count x:数在x所 ...

  5. POJ 1733 Parity game 【带权并查集】+【离散化】

    <题目链接> 题目大意: 一个由0,1组成的序列,每次给出一段区间的奇偶,问哪一条信息不合法. 解题分析: 我们用s[i]表示前i个数的前缀和,那么a b even意味着s[b]和s[a- ...

  6. poj 1984 Navigation Nightmare(带权并查集+小小的技巧)

    题目链接:http://poj.org/problem?id=1984 题意:题目是说给你n个线,并告知其方向,然后对于后面有一些询问,每个询问有一个时间点,要求你输出在该时间点a,b的笛卡尔距离,如 ...

  7. POJ 1182 食物链 (经典带权并查集)

    第三次复习了,最经典的并查集 题意:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们 ...

  8. POJ 2912 - Rochambeau - [暴力枚举+带权并查集]

    题目链接:http://poj.org/problem?id=2912 Time Limit: 5000MS Memory Limit: 65536K Description N children a ...

  9. POJ:1182 食物链(带权并查集)

    http://poj.org/problem?id=1182 Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1 ...

随机推荐

  1. [转] 浅谈 OpenResty

    一.前言 我们都知道Nginx有很多的特性和好处,但是在Nginx上开发成了一个难题,Nginx模块需要用C开发,而且必须符合一系列复杂的规则,最重要的用C开发模块必须要熟悉Nginx的源代码,使得开 ...

  2. c#学习笔记1-简单算法

    using System; namespace Demo { class Studycs { public static void Main(String[] args) { // String re ...

  3. day50——js补充

    day50 前端内容回顾 HTML 标签分类 块级标签:div p h1-h6 form hr br ul li ol table标签 内联标签:span a img label input sele ...

  4. 《三》大话 Typescript 接口

    > 前言: 本文章为 TypeScript 系列文章. 旨在利用碎片时间快速入门 Typescript. 或重新温故 Typescript 查漏补缺.在官方 api 的基础上, 加上一些日常使用 ...

  5. CF241E Flights 差分约束

    传送门 差分约束永远是Itst最烂的图论知识点没有之一qwq 先用dfs把在\(1\)到\(N\)的路径上的所有点都拿出来,其他的点和边状态任意都不会影响答案. 然后考虑设\(dis_i\)表示从\( ...

  6. [BZOJ3230]相似子串(后缀数组)

    显然可以通过后缀数组快速找到询问的两个串分别是什么,然后正反各建一个后缀数组来求两个串的LCP和LCS即可. #include<cstdio> #include<cstring> ...

  7. golang --- time包常用函数以及基础的类型转换

    1.[]byte转为string: package main import ( "fmt" ) func main() { data := [4]byte{0x31, 0x32, ...

  8. 转:使用Goproxy解决golang.org模块无法下载的问题

    原文https://studygolang.com/articles/22277?fr=sidebar 简介 Goproxy 中国完全实现了 Go 的模块代理协议.并且它是一个由中国备受信赖的云服务提 ...

  9. 解决打开IE报错“无法启动...丢失api-ms-win-core-path-l1-1-0.dll”的问题

    打开IE突然发现报错 试了各种方法都不行 最终看这篇文章,才解决:https://www.yijile.com/log/577.html 打开IE设置选项,选择管理加载项,如图讲该选项禁用,就不报错. ...

  10. java之spring之整合ssh-2

    这篇也是主要讲解 ssh 的整合,不同于上一篇的是它的注入方式. 这篇会采用扫描注入的方式,即去除 applicationContext-asd.xml 文件. 目录结构如下: 注意,这里只列举不同的 ...