POJ 1797 Heavy Transportation (Dijkstra)
题目链接:POJ 1797
Description
Background
Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand business. But he needs a clever man who tells him whether there really is a way from the place his customer has build his giant steel crane to the place where it is needed on which all streets can carry the weight.
Fortunately he already has a plan of the city with all streets and bridges and all the allowed weights.Unfortunately he has no idea how to find the the maximum weight capacity in order to tell his customer how heavy the crane may become. But you surely know.
Problem
You are given the plan of the city, described by the streets (with weight limits) between the crossings, which are numbered from 1 to n. Your task is to find the maximum weight that can be transported from crossing 1 (Hugo's place) to crossing n (the customer's place). You may assume that there is at least one path. All streets can be travelled in both directions.
Input
The first line contains the number of scenarios (city plans). For each city the number n of street crossings (1 <= n <= 1000) and number m of streets are given on the first line. The following m lines contain triples of integers specifying start and end crossing of the street and the maximum allowed weight, which is positive and not larger than 1000000. There will be at most one street between each pair of crossings.
Output
The first line contains the number of scenarios (city plans). For each city the number n of street crossings (1 <= n <= 1000) and number m of streets are given on the first line. The following m lines contain triples of integers specifying start and end crossing of the street and the maximum allowed weight, which is positive and not larger than 1000000. There will be at most one street between each pair of crossings.
Sample Input
1
3 3
1 2 3
1 3 4
2 3 5
Sample Output
Scenario #1:
4
Source
TUD Programming Contest 2004, Darmstadt, Germany
Solution
题意
有 N 个城市,M 条道路,Hugo Heavy 要从城市 1 到城市 N 运输货物,每条道路都有它的最大载重量,求从城市 1 到城市 N 运送最多的重量是多少。
思路
Dijkstra
与 POJ 2253 Frogger 类似,修改一下 \(Dijkstra\) 的松弛方程:\(if\ d[v] < min(d[u], w[u][v])\ then\ d[v] = min(d[u], w[u][v])\)。注意 \(d\) 数组初始化成无穷大。
这题有点坑,输出两个换行。
此题还可以用最大生成树解决。戳这里
Code
#include <iostream>
#include <cstdio>
#include <queue>
#include <map>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 1010, M = 1e6 + 10;
const int inf = 0x3f3f3f3f;
typedef pair<int, int> P;
int n, m;
struct Edge {
int to, w;
Edge(int to, int w): to(to), w(w) {}
};
vector<Edge> G[N];
int d[N], v[N];
void init() {
for(int i = 0; i < N; ++i) {
G[i].clear();
}
}
void add(int x, int y, int z) {
G[x].push_back(Edge(y, z));
}
void dijkstra(int s) {
// priority_queue<P,vector<P>,greater<P> > q;
priority_queue<P> q;
memset(d, 0, sizeof(d));
memset(v, 0, sizeof(v));
d[s] = inf;
q.push(P(inf, s));
while(q.size()) {
P p = q.top(); q.pop();
int x = p.second;
if(v[x]) continue;
v[x] = 1;
for(int i = 0; i < G[x].size(); ++i) {
Edge e = G[x][i];
if (d[e.to] < min(d[x], e.w)) {
d[e.to] = min(d[x], e.w);
q.push(P(d[e.to],e.to));
}
}
}
}
int main() {
int T;
scanf("%d", &T);
int kase = 0;
while(T--) {
init();
scanf("%d%d", &n, &m);
for(int i = 0; i < m; ++i) {
int x, y, z;
scanf("%d%d%d", &x, & y, &z);
add(x, y, z);
add(y, x, z);
}
dijkstra(1);
if(kase) printf("\n");
printf("Scenario #%d:\n", ++kase);
printf("%d\n", d[n]);
}
return 0;
}
POJ 1797 Heavy Transportation (Dijkstra)的更多相关文章
- POJ.1797 Heavy Transportation (Dijkstra变形)
POJ.1797 Heavy Transportation (Dijkstra变形) 题意分析 给出n个点,m条边的城市网络,其中 x y d 代表由x到y(或由y到x)的公路所能承受的最大重量为d, ...
- POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径)
POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径) Description Background Hugo ...
- poj 1797 Heavy Transportation(最大生成树)
poj 1797 Heavy Transportation Description Background Hugo Heavy is happy. After the breakdown of the ...
- POJ 1797 Heavy Transportation
题目链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...
- POJ 1797 Heavy Transportation SPFA变形
原题链接:http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K T ...
- POJ 1797 Heavy Transportation (Dijkstra变形)
F - Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- POJ 1797 ——Heavy Transportation——————【最短路、Dijkstra、最短边最大化】
Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64 ...
- POJ 1797 Heavy Transportation (dijkstra 最小边最大)
Heavy Transportation 题目链接: http://acm.hust.edu.cn/vjudge/contest/66569#problem/A Description Backgro ...
- POJ 1797 Heavy Transportation (最大生成树)
题目链接:POJ 1797 Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter pro ...
随机推荐
- Use sed and awk to prettify json
$ cat prettify.sed s/,/,\r\n/g s/\[/\r\n\[\r\n/g s/\]/\r\n\]\r\n/g s/{/\r\n{\r\n/g s/}/\r\n}\r\n/g $ ...
- django-2-目录结构
django是MVC或者叫MTV框架
- linux查看日志中特定字符串以及前后信息内容命令
在项目实施过程中,我们经常会查看日志,更是经常会根据某些特地字符串去查找日志内容. 下面就是日志查找命令: 1.查询字符串命令: cat fileName|grep '要查找的字符串' 实例:cat ...
- 转 什么是Mbps、Kbps、bps、kb、mb及其换算和区别
Mbps 即 Milionbit pro second(百万位每秒): Kbps 即 Kilobit pro second(千位每秒): bps 即 bit pro second(位每秒): 速度单位 ...
- python基础--快速排序
1.快速排序 快速排序是一种交换排序. 快速排序由C. A. R. Hoare在1962年提出. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大 ...
- Codefores 507C Guess Your Way Out!(递归)
C. Guess Your Way Out! time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Linux上用sublime编辑Python时候出现"SyntaxError: Non-ASCII character ‘\xe5′ in file"的问题
Reopen with Encoding UTF-8也没用,那只是在编辑界面里面显示出中文而已,编译的时候还是不能识别中文. 所以,还是按网上说的吧,在每一个有中文的文件第一行加上# -*- codi ...
- java收藏的技术资料链接
TCP三次握手详解: https://blog.csdn.net/baiyan3212/article/details/81302448 ICE通信: https://blog.csdn.net/zh ...
- Python之计算当前月份的日期范围(calendar、datetime)
在当前月份中循环每一天大致的思路就是先计算出当月的第一天和下个月的第一天日期,还有当月总共有多少天,然后把第一天日期按照月总天数累加到下个月的第一天,就ok 啦 from datetime impor ...
- 2018-11-3-如何使用-Telegram
title author date CreateTime categories 如何使用 Telegram lindexi 2018-11-03 10:12:12 +0800 2018-02-21 1 ...