当前位置:网站首页>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;
}
边栏推荐
- LeetCode FizzBuzz C#解答
- Technologie de base de la programmation Shell IV
- socket编程demo二
- The explain statement in MySQL queries whether SQL is indexed, and several types in extra collate and summarize
- Allure of pytest visual test report
- Lenovo explains in detail the green smart city digital twin platform for the first time to solve the difficulties of urban dual carbon upgrading
- kotlin 条件控制
- The CDC of sqlserver can read the data for the first time, but it can't read the data after adding, deleting and modifying. What's the reason
- Pointnet/Pointnet++点云数据集处理并训练
- 牛客小白月赛7 谁是神箭手
猜你喜欢
Lm10 cosine wave homeopathic grid strategy
There are multiple divs in the large div, which are displayed on the same line. After overflow, scroll bars are generated without line breaks
Summary and sorting of 8 pits of redis distributed lock
BI技巧丨权限轴
牛客小白月赛7 谁是神箭手
Pointnet/Pointnet++点云数据集处理并训练
一文掌握数仓中auto analyze的使用
Lenovo explains in detail the green smart city digital twin platform for the first time to solve the difficulties of urban dual carbon upgrading
The explain statement in MySQL queries whether SQL is indexed, and several types in extra collate and summarize
Hough Transform 霍夫变换原理
随机推荐
The 15th youth informatics competition in Shushan District in 2019
SSRS筛选器的IN运算(即包含于)用法
Wechat reading notes of "work, consumerism and the new poor"
测试工程师如何“攻城”(下)
有关架构设计的个人思考(本文后续不断修改更新)
There are multiple divs in the large div, which are displayed on the same line. After overflow, scroll bars are generated without line breaks
How to use async Awati asynchronous task processing instead of backgroundworker?
2021 合肥市信息学竞赛小学组
牛客小白月赛7 E Applese的超能力
FTP, SFTP file transfer
Hough Transform 霍夫变换原理
The 300th weekly match of leetcode (20220703)
MySQL数据库基本操作-DDL | 黑马程序员
To sort out messy header files, I use include what you use
In flinksql, in addition to data statistics, is the saved data itself a state
Shell 編程核心技術《四》
Shell programming core technology II
Pointnet/Pointnet++点云数据集处理并训练
TCP两次挥手,你见过吗?那四次握手呢?
Educational Codeforces Round 22 E. Army Creation