POJ 3728 The merchant(并查集+DFS)
【题目链接】 http://poj.org/problem?id=3728
【题目大意】
给出一棵树,每个点上都可以交易货物,现在给出某货物在不同点的价格,
问从u到v的路程中,只允许做一次买入和一次卖出,最多能得到多少钱。
【题解】
我们维护一个up表示,x与父节点的连线中,
最大值在靠近父节点的位置时最小值与最大值的最大差值
dw表示,x与父节点的连线中,最小值在靠近父节点的位置时最小值与最大值的最大差值
Min和Max分别表示x到父节点中的最大值和最小值
对于询问x到y的答案,我们发现以LCA为父节点时,答案只会是dwx,upy,和Maxx-Miny中的最优值,
所以我们在每个查询的LCA位置计算答案,自低向上维护四个数组,
这个用并查集就可以顺利完成了。
【代码】
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;
const int N=50010;
int n,m,f[N],ans[N],vis[N],Max[N],Min[N],up[N],dw[N],val[N];
struct edge{int x,id;};
struct data{int x,y;}p[N];
vector<edge> Q[N];
vector<int> G[N],a[N];
int sf(int x){
if(f[x]==x)return x;
int fx=f[x];
f[x]=sf(f[x]);
up[x]=max(max(up[x],up[fx]),Max[fx]-Min[x]);
dw[x]=max(max(dw[x],dw[fx]),Max[x]-Min[fx]);
Max[x]=max(Max[x],Max[fx]);
Min[x]=min(Min[x],Min[fx]);
return f[x];
}
void dfs(int u){
vis[u]=1;
Max[u]=Min[u]=val[u];
up[u]=dw[u]=0;
for(int i=0;i<Q[u].size();i++){
edge e=Q[u][i];
if(vis[e.x])a[sf(e.x)].push_back(e.id);
}
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(!vis[v]){dfs(v);f[v]=u;}
}
for(int i=0;i<a[u].size();i++){
int id=a[u][i];
int x=p[id].x,y=p[id].y;
sf(x); sf(y);
ans[id]=max(max(up[x],dw[y]),Max[y]-Min[x]);
ans[id]=max(0,ans[id]);
}
}
void solve(){
for(int i=1;i<=n;i++)scanf("%d",&val[i]);
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
}for(int i=1;i<=n;i++)f[i]=i;
scanf("%d",&m);
for(int i=1;i<=m;i++){
int u,v;
scanf("%d%d",&u,&v);
Q[u].push_back(edge{v,i});
Q[v].push_back(edge{u,i});
p[i].x=u;p[i].y=v;
}memset(vis,0,sizeof(vis));
dfs(1);
for(int i=1;i<=m;i++)printf("%d\n",ans[i]);
}
int main(){
while(~scanf("%d",&n))solve();
return 0;
}
POJ 3728 The merchant(并查集+DFS)的更多相关文章
- POJ 1562 Oil Deposits (并查集 OR DFS求联通块)
Oil Deposits Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14628 Accepted: 7972 Des ...
- poj 3728 The merchant(LCA)
Description There are N cities in a country, and there is one and only one simple path between each ...
- POJ 3728 The merchant(LCA+DP)
The merchant Time Limit : 6000/3000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...
- HDU 1232 并查集/dfs
原题: http://acm.hdu.edu.cn/showproblem.php?pid=1232 我的第一道并查集题目,刚刚学会,我是照着<啊哈算法>这本书学会的,感觉非常通俗易懂,另 ...
- poj 1733(带权并查集+离散化)
题目链接:http://poj.org/problem?id=1733 思路:这题一看就想到要用并查集做了,不过一看数据这么大,感觉有点棘手,其实,我们仔细一想可以发现,我们需要记录的是出现过的节点到 ...
- poj 1182 食物链 (并查集)
http://poj.org/problem?id=1182 关于并查集 很好的一道题,开始也看了一直没懂.这次是因为<挑战程序设计竞赛>书上有讲解看了几遍终于懂了.是一种很好的思路,跟网 ...
- 1021.Deepest Root (并查集+DFS树的深度)
A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...
- POJ 1182 食物链(并查集拆点)
[题目链接] http://poj.org/problem?id=1182 [题目大意] 草原上有三种物种,分别为A,B,C A吃B,B吃C,C吃A. 1 x y表示x和y是同类,2 x y表示x吃y ...
- POJ1291-并查集/dfs
并查集 题意:找出给定的这些话中是否有冲突.若没有则最多有多少句是对的. /* 思路:如果第x句说y是对的,则x,y必定是一起的,x+n,y+n是一起的:反之x,y+n//y,x+n是一起的. 利用并 ...
随机推荐
- pmap用法小计
By francis_hao Aug 4,2017 pmap-报告进程的内存映射. 概要 pmap [options] pid [...] 描述 pmap命令用来报告一个或多个进程的 ...
- Maven 标准目录结构
Maven 标准目录结构 好的目录结构可以使开发人员更容易理解项目,为以后的维护工作也打下良好的基础.Maven2根据业界公认的最佳目录结构,为开发者提供了缺省的标准目录模板.Maven2的标准目录结 ...
- 一个IT中专生在深圳的9年辛酸经历
一个IT中专生在深圳的9年辛酸经历 想一想来到深圳已经近10年了,感概万千呐!从一个身无分文的中专职校计算机毕业出来后,竟然大胆的南下(之前可是连我们那地区之外都没去过),现在有供完的房子,温柔的妻子 ...
- Android 网络编程--上传文件及相应的参数到服务器
之前一直在做SiteCheck的项目,所用到的知识大部分都涉及到网络编程方面,所以现在有时间先把它的使用方法及一些注意事项记录下来.在这里我用两种例子让大家了解它的使用方法: (1)上传图片及相应参数 ...
- mysql 基本操作练习
), sex ), age )); , '北京'); , '上海'); , '广州'); , '北京'); , '北京'); , '上海'); , '北京'); #(). 写出sql语句,查询所有年龄 ...
- python_plot画图参数设置
# coding:utf-8 import pandas as pd import numpy as np import matplotlib.pyplot as plt # one_hot数据的读取 ...
- vc6.0里使用lib(静态库)的方法
vc6.0 中使用lib文件 使用库的方法如下:1. 包含库的头文件(把库的头文件包含到项目中)在应用程序工程中使用#include "file path"file path可以为 ...
- 计算Linux权限掩码umask值
创建文件默认最大权限为666 (-rw-rw-rw-),默认创建的文件没有可执行权限x位. 创建目录默认最大权限777(-rwx-rwx-rwx),默认创建的目录属主是有x权限,允许用户进入. 简单的 ...
- requests-html的js执行功能简单使用
#!/usr/bin/env python # encoding: utf-8 import asyncio from requests_html import HTMLSession import ...
- nginx、apache、tomcat的区别
1.Apache Apache支持模块化,性能稳定,Apache本身是静态解析,适合静态HTML.图片等,但可以通过扩展脚本.模块等支持动态页面等. 缺点:配置相对复杂,自身不支持动态页面. 2.To ...