当前位置:网站首页>1003 emergency (25 points) (PAT class a)
1003 emergency (25 points) (PAT class a)
2022-07-04 19:36:00 【Acacia moon tower】
Problem Description:
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 Specification:
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 Specification:
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
I typed it according to the boss' blog ,,https://www.liuchuo.net/archives/2359
#include <iostream>
#include <algorithm>
using namespace std;
int n, m, c1, c2;
int e[510][510], weight[510], dis[510], num[510], w[510];
bool visit[510];
const int inf = 999999;
int main() {
scanf("%d %d %d %d", &n, &m, &c1, &c2);
for(int i = 0; i < n; i++) {
scanf("%d", &weight[i]);
}
fill(e[0], e[0]+510*510, inf);
fill(dis, dis+510, inf);
int x, y, v;
for(int i = 0; i < m; i++) {
scanf("%d %d %d", &x, &y, &v);
e[x][y] = e[y][x] = v;
}
dis[c1] = 0;
w[c1] = weight[c1];
num[c1] = 1;
for(int i = 0; i < n; i++) {
int u = -1, minn = inf;
for(int j = 0; j < n; j++) {
if(visit[j] == false && dis[j] < minn) {
u = j;
minn = dis[j];
}
}
if(u == -1) break;
visit[u] = true;
for(int v = 0; v < n; v++) {
if(visit[v] == false && e[u][v] != inf) {
if(dis[u] + e[u][v] < dis[v]) {
dis[v] = dis[u] + e[u][v];
num[v] = num[u];
w[v] = w[u] + weight[v];
} else if(dis[u] + e[u][v] == dis[v]) {
num[v] = num[v] + num[u];
if(w[u] + weight[v] > w[v]) {
w[v] = w[u] + weight[v];
}
}
}
}
}
printf("%d %d\n", num[c2], w[c2]);
return 0;
}
边栏推荐
- QT realizes interface sliding switching effect
- Explicit random number
- Unity编辑器扩展C#遍历文件夹以及子目录下的所有图片
- 勾股数规律(任意三个数能够满足勾股定理需要满足的条件)
- “只跑一趟”,小区装维任务主动推荐探索
- 升级智能开关,“零火版”、“单火”接线方式差异有多大?
- C # implementation defines a set of SQL statements that can be executed across databases in the middle of SQL (detailed explanation of the case)
- 876. Intermediate node of linked list
- 876. 链表的中间结点
- Bi skills - permission axis
猜你喜欢
勾股数规律(任意三个数能够满足勾股定理需要满足的条件)
Pytorch学习(四)
Oracle with as ora-00903: invalid table name multi report error
Lm10 cosine wave homeopathic grid strategy
Oracle with as ORA-00903: invalid table name 多表报错
SSRS筛选器的IN运算(即包含于)用法
关于判断点是否位于轮廓内的一点思考
The explain statement in MySQL queries whether SQL is indexed, and several types in extra collate and summarize
联想首次详解绿色智城数字孪生平台 破解城市双碳升级难点
YOLOv5s-ShuffleNetV2
随机推荐
Reflection (I)
长城证券开户安全吗 买股票怎么开户
socket编程demo二
Stream stream
欧拉函数
Generate XML elements
Add namespace declaration
Shell 编程核心技术《一》
Hough transform Hough transform principle
92.(cesium篇)cesium楼栋分层
.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查)
2014合肥市第三十一届青少年信息学奥林匹克竞赛(小学组)试题
Leetcode fizzbuzz C # answer
2021 合肥市信息学竞赛小学组
Jetpack Compose 教程
1007 Maximum Subsequence Sum(25 分)(PAT甲级)
Pytorch学习(四)
Shell 编程核心技术《四》
Opencv functions and methods related to binary threshold processing are summarized for comparison and use
876. Intermediate node of linked list