hdu 6201 transaction (最短路变形——带负权最长路)
题意:
给定n个城市的货物买卖价格, 然后给定n-1条道路,每条路有不同的路费, 求出从某两个城市买卖一次的最大利润。
利润 = 卖价 - (买价 + 路费)

样例数据, 最近是从第一个点买入, 第4个点卖出, 利润为8
分析:
1.如果一条边连接(u,v),路费为cost ,城市买卖价格用P( )表示, 那么他的边权就表达为(P(v) - P(u) - cost).
2.我们可以假设有一个起点。他连接着所有的点,边权为0。
3.那么如果从这个点出发的话, 就等于是把所有的城市都尝试作为买入城市
4.然后只要做一次允许有副权的SPFA最短路算法就能算出正确答案了。
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
const int maxn = 1e5 + ;
int T,n;
int d[maxn], P[maxn], vis[maxn];
struct Node{
int num;
int dis;
Node(int a = , int b = ):num(a), dis(b){}
};
vector<Node> G[maxn];
int spfa(){
memset(d,-,sizeof(d));//因为要做最长路, 所以把初始值设为-1。
memset(vis,,sizeof(vis));
for(int i = ; i <= n; i++) G[].push_back(Node(i,)); // 虚拟一个起点,练向所有的点。
queue<int> q; d[] = ;
q.push();
vis[] = ;
while(!q.empty()){
int u = q.front();
for(int i = ; i < G[u].size(); i++){
int v = G[u][i].num;
if(d[v] < d[u] + G[u][i].dis){
d[v] = d[u] + G[u][i].dis;
if(!vis[v]){
q.push(v);
vis[v] = ;
}
}
}
q.pop();
vis[u] = ;
}
int ans = -;
for(int i = ; i <= n; i++){
ans = max(ans,d[i]);
}
// puts("");
return ans;
}
void init(int n){
for(int i = ; i <= n; i++ )
G[i].clear();
}
int main(){
scanf("%d", &T);
while(T--){
scanf("%d", &n);
for(int i = ; i <= n; i++){
scanf("%d", &P[i]);
} for(int i = ; i < n - ; i++){
int u , v, cost;
scanf("%d %d %d",&u, &v, &cost);
G[u].push_back(Node(v,P[v] - P[u] - cost));//双向边
G[v].push_back(Node(u,P[u] - P[v] - cost)); }
printf("%d\n",spfa());
init(n);//初始化临接表
}
}
hdu 6201 transaction (最短路变形——带负权最长路)的更多相关文章
- 图之单源Dijkstra算法、带负权值最短路径算法
1.图类基本组成 存储在邻接表中的基本项 /** * Represents an edge in the graph * */ class Edge implements Comparable< ...
- Expm 10_1 带负权值边的有向图中的最短路径问题
[问题描述] 对于一个带负权值边的有向图,实现Bellman-Ford算法,求出从指定顶点s到其余顶点的最短路径,并判断图中是否存在负环. package org.xiu68.exp.exp10; p ...
- HDU 6201 transaction transaction transaction(拆点最长路)
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- hdu 6201 transaction transaction transaction
https://vjudge.net/contest/184514#problem/H 题意: 一个商人为了赚钱,在城市之间倒卖商品.有n个城市,每个城市之间有且只有一条无向边连通.给出n个城市的货物 ...
- SPFA 最短路 带负权边的---- 粗了解
SPFA(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余计算. 算法大致流程是用一个队列来进行维护. 初始时将源加入队列 ...
- Wormholes 最短路判断有无负权值
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes ...
- poj 3259 bellman最短路推断有无负权回路
Wormholes Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 36717 Accepted: 13438 Descr ...
- HDU 6201 transaction transaction transaction(树形DP)
transaction transaction transaction Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 132768/1 ...
- HDU - 6201 transaction transaction transaction(树形dp取两点)
transaction transaction transaction Kelukin is a businessman. Every day, he travels around cities to ...
随机推荐
- 「开源」目前见过的最好的开源OA产品
这是我目前见过的最好的开源OA产品.功能完整,代码结构清晰.值得推荐. 1.项目介绍 oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql ...
- AtCoder Grand Contest 001 D - Arrays and Palindrome
题目传送门:https://agc001.contest.atcoder.jp/tasks/agc001_d 题目大意: 现要求你构造两个序列\(a,b\),满足: \(a\)序列中数字总和为\(N\ ...
- Android课程设计第六天欢迎界面(跳转)
注意:课程设计只为完成任务,不做细节描述~ package com.example.myapplication; import android.app.Activity; import android ...
- solr 包地址
http://archive.apache.org/dist/lucene/solr/6.3.0/
- cmd命令下执行jar包程序
在cmd中使用指令来执行jar包 概述: 今天有一个需求,要在cmd中执行.jar文件 实践: 1.新建你的Hello world 2.导出到jar包 3.打开你的成功导出的jar包 4.打开文件夹 ...
- Python实现决策树ID3算法
主要思想: 0.训练集格式:特征1,特征2,...特征n,类别 1.采用Python自带的数据结构字典递归的表示数据 2.ID3计算的信息增益是指类别的信息增益,因此每次都是计算类别的熵 3.ID3每 ...
- Codeforces Round #243 (Div. 1)
---恢复内容开始--- A 枚举l,r #include <iostream> #include<cstdio> #include<cstring> #inclu ...
- vs 2015 编译cocos2dx 报错
VS 2015 compiling cocos2d-x 3.3 error “fatal error C1189: #error: Macro definition of snprintf confl ...
- 时间插件-daterangepicker
一款基于bootstrap的时间插件daterangepicker,顾名思义,主要用于时间区间选择,也可做单个时间选择 demo.1汉化版的一个时间选择案例 <!DOCTYPE html> ...
- 如何修改站点url
1.config目录下的config_global.php 文件,修改:$_config['cookie']['cookiedomain'] = '.xxxxx.com';2.config目录下的co ...