沉重的货物

Time Limit: 1000ms
Memory Limit: 65536KB

64-bit integer IO format: %lld      Java class name: Main

Type:

 

CUITCPC是一个专门生产大型货运火车的工厂。他们的新型货运火车XX V1.0,是如此之大,以至于可以运输的货物的重量并不取决于那个火车本身,而只是受限于你所通过的铁路的承重。

给你出发和目标城市,你的任务就是求出火车从初始城市到目标城市的最大载重。

Input

输入可能包括一组或者多组测试数据。每一个测试数据的前两行是两个整数:城市的数量n(2<=n<=1000)和铁路的条数r(1<=r<= 19900)。

紧接着是r行,每一行描述一条连接两个城市的铁路以及这段铁路所能承受的最大重量。城市名不会超过30个字符,也不会有空白字符出现在城市名中。承重是一个0-10000的整数。铁路都是双向的。

最后一行是两个城市的名字:初始城市和目标城市。

输入的结束条件是n和r都为0

Output

对于每一组测试数据

输出包括3行:

l  一行输出"Scenario #x",其中x是测试数据的组数

l  一行输出"y tons",其中y表示最大载重量

l  一个空行

Sample Input

4 3
ACM ICPC 100
ICPC World 80
World CPC 120
ACM CPC
5 5
ACM ICPC 100
ICPC World 80
World CPC 120
ACM Chengdu 220
Chengdu CPC 170
CPC ACM
0 0

Sample Output

Scenario #1
80 tons Scenario #2
170 tons

Source

 
 
解题思路:将d[i]表示成从原点到i点所有路径中最短边的最大值 。只需要改变dijstra中的判断条件改一下,初始化改一下就行了。
 
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<string>
#include<iostream>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<set>
using namespace std;
typedef long long LL;
#define mid (L+R)/2
#define lson rt*2,L,mid
#define rson rt*2+1,mid+1,R
const int maxn = 1e3 + 300;
const LL INF = 0x3f3f3f3f;
map<string,int>mp;
struct Node{
int d;
int u;
Node(){}
Node(int _d,int _u):d(_d),u(_u){}
bool operator < (const Node & rhs)const{
return d < rhs.d;
}
};
priority_queue<Node>PQ;
struct Edge{
int from, to, next, dist;
Edge(){}
Edge(int _from,int _to,int _next,int _dist):from(_from),to(_to),next(_next),dist(_dist){}
}edges[maxn*100];
int tot, head[maxn];
void init(){
tot = 0;
memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int d){
edges[tot] = Edge(u,v,head[u],d);
head[u] = tot++;
}
int st, en, n;
int d[maxn], vis[maxn];
void Dijstra(){
for(int i = 1; i <= n; i++){
d[i] = 0;
}
memset(vis,0,sizeof(vis));
d[st] = INF;
while(!PQ.empty()){
Node x = PQ.top();
PQ.pop();
int u = x.u;
if(vis[u]) continue;
vis[u] = 1;
for(int i = head[u]; i != -1; i = edges[i].next){
Edge &e = edges[i];
if(!vis[e.to] && d[e.to] < min(d[e.from], e.dist)){
d[e.to] = min(d[e.from], e.dist);
PQ.push(Node(d[e.to],e.to));
}
}
}
}
int main(){
string s1,s2;
int m, dis, T = 0;
while(scanf("%d%d",&n,&m)!=EOF&& n&&m){
int nn = 0;
init();
mp.clear();
// mp.erase(mp.begin(),mp.end());
for(int i = 1; i <= m; i++){
cin>>s1>>s2;
cin>>dis;
if(mp.count(s1) == 0){
mp[s1] = ++nn;
}
if(mp.count(s2) == 0){
mp[s2] = ++nn;
}
addedge(mp[s1],mp[s2],dis);
addedge(mp[s2],mp[s1],dis);
}
cin>>s1 >> s2;
st = mp[s1]; en = mp[s2];
PQ.push(Node(INF,st));
Dijstra();
cout<<"Scenario #"<<++T<<endl;
cout<<d[en] <<" tons"<<endl<<endl;
}
return 0;
}

BNU 20950 ——沉重的货物 —————— · 最短路、最短边最大化」的更多相关文章

  1. POJ 1797 ——Heavy Transportation——————【最短路、Dijkstra、最短边最大化】

    Heavy Transportation Time Limit:3000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64 ...

  2. BNU 26480 Horror List【最短路】

    链接: http://www.bnuoj.com/bnuoj/problem_show.php?pid=26480 http://www.bnuoj.com/bnuoj/contest_show.ph ...

  3. 广搜最短路(最短时间到达目的地),POJ(3669)

    题目链接:http://poj.org/problem?id=3669 解题报告: 1.流星坠落的点,四周和自己本身都被毁灭,不断更新每个点被毁灭的时候的最短时间. 2.搜索终点是,到达某个点,这个不 ...

  4. 图论杂项细节梳理&模板(虚树,圆方树,仙人掌,欧拉路径,还有。。。)

    orzYCB 虚树 %自为风月马前卒巨佬% 用于优化一类树形DP问题. 当状态转移只和树中的某些关键点有关的时候,我们把这些点和它们两两之间的LCA弄出来,以点的祖孙关系连成一棵新的树,这就是虚树. ...

  5. 遁入NOIP记

    回归noip啦 给自己定个小目标 500分起步 在这里列一下需要搞的东西OvO 1.算法基础 模拟 贪心 二分 分治 2.搜索 / 记忆化搜索 剪枝 对抗搜索 3.dp 状压 组合数学 树D 单队 D ...

  6. suseoj 1212: 推箱子问题(bfs)

    1212: 推箱子问题 时间限制: 1 Sec  内存限制: 128 MB提交: 60  解决: 13[提交][状态][讨论版][命题人:liyuansong] 题目描述 码头仓库是划分为n×m个格子 ...

  7. 长乐培训Day6

    T1 数列 题目 [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据规模] 如上所述. 解析 身为T1,居然比T4还难......让我怎么办......以下为巨佬题解: 我猜 ...

  8. 图论之tarjan真乃神人也,强连通分量,割点,桥,双连通他都会

    先来%一下Robert Tarjan前辈 %%%%%%%%%%%%%%%%%% 然后是热情感谢下列并不止这些大佬的博客: 图连通性(一):Tarjan算法求解有向图强连通分量 图连通性(二):Tarj ...

  9. DP刷题记录(持续更新)

    DP刷题记录 (本文例题目前大多数都选自算法竞赛进阶指南) TYVJ1071 求两个序列的最长公共上升子序列 设\(f_{i,j}\)表示a中的\(1-i\)与b中色\(1-j\)匹配时所能构成的以\ ...

随机推荐

  1. 【C#】特性标签中的属性解释

    第一个为特性作用于类,或者接口(interface) 第二个为是否允许重叠定义,就是连续写两个特性标签 第三个为是否继承,当继承时候,除输出子类外,父类也将输出

  2. Task 回调

    前正无生意,且记录Task回调之用法. using System; using System.Collections.Generic; using System.Diagnostics; using ...

  3. php+jquery 实现 ajax上传图片到非当前服务器

    用 html file控件上传图片,因为 $_FILES["file"] 是传到当前服务器,想要上传到另外一个服务器需要通过服务器脚本实现. 1.图片上传 引入jquery 和 a ...

  4. git Problem with the SSL CA cert (path? access rights?)

    问题: [root@localhost opt]# git clone https://github.com/docker/docker.git 正克隆到 'docker'...fatal: unab ...

  5. javascript正则表达式——元字符

    元字符(Metacharacter)是拥有特殊含义的字符: 元字符        描述 (1)   .             查找单个字符,除了换行和行结束符. 例子: <!DOCTYPE h ...

  6. Python之路系列:面向对象初级:静态属性、静态方法、类方法

    一.静态属性 静态属性相当于数据属性. 用@property语法糖装饰器将类的函数属性变成可以不用加括号直接的类似数据属性. 可以封装逻辑,让用户感觉是在调用一个普通的数据属性. 例子: class ...

  7. js appendChild与insertBefore 区别和用法

      1.appendChild() 方法:可以向节点的子节点列表的末尾添加新的子节点. 比如:appendChild(newchild)括号里可以是创建的标签var newchild = docume ...

  8. Qt 学习之路 2(29):绘制设备

    Qt 学习之路 2(29):绘制设备 豆子 2012年12月3日 Qt 学习之路 2 28条评论 绘图设备是继承QPainterDevice的类.QPaintDevice就是能够进行绘制的类,也就是说 ...

  9. 老男孩python作业4-ATM程序开发

    实现一个ATM + 购物商城程序: 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 支持多账户登录 支持账户间转账 记录每月日常消费流水 提供还款 ...

  10. PHP 位运算符

    位运算符 位运算符是指对二进制位从低位到高位对齐后进行运算. 符号 作用 举例 个人理解 & 按位与 $m & $n 全1为1,否则为0 | 按位或 $m | $n 全0为0,有1为1 ...