PAT 1003. Emergency (25)
1003. Emergency (25)
As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams in each city and the length of each road between any pair of cities are marked on the map. When there is an emergency call to you from some other city, your job is to lead your men to the place as quickly as possible, and at the mean time, call up as many hands on the way as possible.
Input
Each input file contains one test case. For each test case, the first line contains 4 positive integers: N (<= 500) - the number of cities (and the cities are numbered from 0 to N-1), M - the number of roads, C1 and C2 - the cities that you are currently in and that you must save, respectively. The next line contains N integers, where the i-th integer is the number of rescue teams in the i-th city. Then M lines follow, each describes a road with three integers c1, c2 and L, which are the pair of cities connected by a road and the length of that road, respectively. It is guaranteed that there exists at least one path from C1 to C2.
Output
For each test case, print in one line two numbers: the number of different shortest paths between C1 and C2, and the maximum amount of rescue teams you can possibly gather.
All the numbers in a line must be separated by exactly one space, and there is no extra space allowed at the end of a line.
Sample Input
5 6 0 2
1 2 1 5 3
0 1 1
0 2 2
0 3 1
1 2 1
2 4 1
3 4 1
Sample Output
2 4
/* dijstra的变种
1. 求最短路的总可能路径~(每次更新节点到集合S(已找到最短路的点集)距离时 若dist[i] = dist[v0] +map[v0][i] 将
Count[i]+= Count[v0]; 若相等 则总路径数此次不变)
2. 在距离最短情况下,求最多能带多少护士去~~ (每次更新节点到集合S(已找到最短路的点集)距离时 若dist[i] = dist[v0] +map[v0][i] 将
更新护士值 为护士最多的那个值)
*/
#include "iostream"
using namespace std;
#define INF 99999999
int n, m;
int cost[];
int Mcost[];
int dist[];
int map[][];
int Count[] ;
void dijkstra(int v0,int n) {
bool visited[] = { false };
dist[v0] = ;
Mcost[v0] = cost[v0];
visited[v0] = true;
for (int i = ; i < n; i++) {
int MIN = INF;
for (int j = ; j < n; j++) {
if (!visited[j]) {
if (dist[j] < MIN) {
v0 = j;
MIN = dist[j];
}
}
}
visited[v0] = true;
for (int i = ; i < n; i++) {
if (!visited[i]) {
if (dist[i] > MIN + map[v0][i] ) {
dist[i] = MIN + map[v0][i];
Mcost[i] = Mcost[v0] + cost[i];
Count[i] = Count[v0];
}
else if (dist[i] == MIN + map[v0][i] ) {
Count[i] += Count[v0];
if (Mcost[i] < Mcost[v0] + cost[i]) {
Mcost[i] = Mcost[v0] + cost[i];
}
}
}
}
}
}
int main() {
int v, e, c1, c2;
cin >> v >> e >> c1 >> c2;
for (int i = ; i < v; i++) {
cin >> cost[i];
Count[i] = ;
}
for (int i = ; i < v; i++)
for (int j = ; j < v; j++) {
map[i][j] = INF;
}
for (int i = ; i < e; i++) {
int a, b, c;
cin >> a >> b >> c;
map[a][b] = map[b][a] = c;
if (a == c1)
Mcost[b] = cost[c1] + cost[b];
else if (b == c1)
Mcost[a] = cost[c1] + cost[a];
}
for (int i = ; i < v; i++) {
dist[i] = map[c1][i];
}
dijkstra(c1,v);
cout << Count[c2] <<" "<< Mcost[c2] << endl;
return ;
PAT 1003. Emergency (25)的更多相关文章
- PAT 1003. Emergency (25) dij+增加点权数组和最短路径个数数组
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- PAT 1003 Emergency (25分)
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
- PAT 解题报告 1003. Emergency (25)
1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...
- PAT 甲级 1003. Emergency (25)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- PAT 1003 Emergency[图论]
1003 Emergency (25)(25 分) As an emergency rescue team leader of a city, you are given a special map ...
- 1003 Emergency (25)(25 point(s))
problem 1003 Emergency (25)(25 point(s)) As an emergency rescue team leader of a city, you are given ...
- 1003 Emergency (25分) 求最短路径的数量
1003 Emergency (25分) As an emergency rescue team leader of a city, you are given a special map of ...
- PAT 甲级1003 Emergency (25)(25 分)(Dikjstra,也可以自己到自己!)
As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...
- PAT 1003 Emergency
1003 Emergency (25 分) As an emergency rescue team leader of a city, you are given a special map of ...
随机推荐
- Firefly是什么?有什么特点?
原地址:http://bbs.gameres.com/forum.php?mod=viewthread&tid=219285 Firefly是免费.开源.稳定.快速扩展.能 “热更新”的分布式 ...
- Android 多渠道打包原理和使用
每次中午吃饭总会和技术同学聊天.当做 iOS 开发的做安卓开发的人员在一起的时候,他们中间又多了一个话题:iOS 开发难还是安卓开发难. 这个时候做安卓开发的同学最激动说安卓开发要自己画界面.机型复杂 ...
- 实现SELECT的全选,反选,AB选的JAVASCRIPT代码
参考网上,用原生JS粗糙实现. 我发现用UIKIT的BUTTON会自动刷新我那核心的模态窗口,只好用另外的LABEL或CODE标签了. $(".btn-select-all").c ...
- php smarty section使用
文件:section.tpl <html> <head> <title></title> </head> <body> {sec ...
- MongoDB实战指南(五):MongoDB中的聚集分析
聚集操作是对数据进行分析的有效手段.MongoDB主要提供了三种对数据进行分析计算的方式:管道模式聚集分析,MapReduce聚集分析,简单函数和命令的聚集分析. 1. 管道模式进行聚集 这里所说的管 ...
- HDU 5015 233 Matrix
题意:给定一个矩阵的第0列的第1到n个数,第一行第1个数开始每个数分别为233, 2333........,求第n行的第m个数. 分析: 其实也没那么难,自己想了半天还没往对的方向想,m最大1e9,应 ...
- JavaWeb学习总结(十三)——使用Session防止表单重复提交
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...
- 基于CommentCoreLibrary简单的弹幕实现
本文地址:http://www.cnblogs.com/liaoyu/p/ccl-demo.html 实现基于开源的 CommentCoreLibrary 最近有需求要实现一个简单的评论弹幕实现,通过 ...
- 模拟+二分 poj-1019-Number Sequence
题目链接: http://poj.org/problem?id=1019 题目大意: Sk表示123...k 把S1S2S3...Sk排成一行 比如:112123123412345123456.... ...
- Android中使用proguardgui混淆jar包
本文章的前提条件是,读者已经掌握了正确导出jar包的技能. 1.拷贝Android项目中"proguard.cfg"文件到你指定的位置,并改名为"proguard.pro ...