PAT甲级1003. Emergency

题意:

作为一个城市的紧急救援队长,你将得到一个你所在国家的特别地图。该地图显示了几条分散的城市,连接着一些道路。每个城市的救援队数量和任何一对城市之间的每条路线的长度在地图上标记。当你从其他城市发出紧急电话时,

你的工作是尽快引导你的人到这个地方,同时在途中尽可能多的呼唤城市中的别的救援队。

输入

每个输入文件包含一个测试用例。对于每个测试用例,第一行包含4个正整数:N(<= 500) - 城市数量(城市编号从0到N-1),M - 道路数量C1和C2 - 你目前在的城市,你必须分别保存。下一行包含N个整数,其中i-

整数是第i个城市的救援队数。然后M行跟随,每个描述一个具有三个整数c1,c2和L的道路,分别是通过道路连接的一对城市和该道路的长度。保证从C1到C2至少存在一条路径。

输出

对于每个测试用例,打印一行两个数字:C1和C2之间不同最短路径的数量以及可以收集的最大救援队数。

一行中的所有数字必须分开一个空格,并且在行的末尾不允许额外的空格。

思路:

题意就是求city1到city2的单源最短路径,并且求出最短路径下能搜集最多救援队数量。

ac代码:

C++

// pat1003.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include<iostream>
#include<cstdio>
#include<string>
#include<algorithm> using namespace std; const int MAX = 0x7fffffff; int road[501][501]; //记录city间的距离
int rescue[501]; //记录city的救援队
int n, m;
int starting, ending;
int len[501]; //记录start到各个点的距离
bool visit[501] = { false }; //保存已经遍历的点 int main()
{
cin >> n >> m >> starting >> ending;
for (int i = 0; i < n; i++)
cin >> rescue[i]; for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i == j) road[i][j] = 0;
else road[i][j] = MAX;
}
} for (int i = 0; i < n; i++)
len[i] = MAX; int c1,c2;
for (int i = 0; i < m; i++)
{
cin >> c1 >> c2;
cin >> road[c1][c2];
road[c2][c1] = road[c1][c2];
if (c1 == starting) len[c2] = road[c1][c2];
if (c2 == starting) len[c1] = road[c1][c2];
} int tempmin = MAX,tempindex;
int diffdis[501] = { 0 }; //记录有几种最短路径
diffdis[starting] = 1;
len[starting] = 0;
int maxpeo[501] = { 0 }; //记录能搜集的最大救援队数量
maxpeo[starting] = rescue[starting];
while(1)
{
tempmin = MAX;
for (int i = 0; i < n; i++)
{
if (!visit[i] && len[i] < tempmin)
{
tempmin = len[i];
tempindex = i;
}
} visit[tempindex] = true; for (int i = 0; i < n; i++)
{
if (!visit[i] && road[tempindex][i] != MAX && tempmin + road[tempindex][i] < len[i])
{
len[i] = tempmin + road[tempindex][i];
diffdis[i] = diffdis[tempindex];
maxpeo[i] = maxpeo[tempindex] + rescue[i];
}
else if (!visit[i] && road[tempindex][i] != MAX && tempmin + road[tempindex][i] == len[i])
{
diffdis[i] += diffdis[tempindex];
maxpeo[i] = max(maxpeo[i], maxpeo[tempindex] + rescue[i]);
}
} if (tempindex == ending) break;
} cout << diffdis[ending] << " " << maxpeo[ending] << endl;
return 0;
}

PAT甲级1003. Emergency的更多相关文章

  1. 图论 - PAT甲级 1003 Emergency C++

    PAT甲级 1003 Emergency C++ As an emergency rescue team leader of a city, you are given a special map o ...

  2. PAT 甲级 1003. Emergency (25)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  3. 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 ...

  4. PAT 甲级 1003 Emergency

    https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376 As an emergency rescue ...

  5. PAT Advanced 1003 Emergency 详解

    题目与翻译 1003 Emergency 紧急情况 (25分) As an emergency rescue team leader of a city, you are given a specia ...

  6. PAT Advanced 1003 Emergency (25) [Dijkstra算法]

    题目 As an emergency rescue team leader of a city, you are given a special map of your country. The ma ...

  7. PAT甲级1003题解——Dijkstra

    解题步骤: 1.初始化:设置mat[][]存放点之间的距离,vis[]存放点的选取情况,people[]存放初始时每个城市的人数,man[]存放到达每个城市的救援队的最多的人数,num[]存放到达每个 ...

  8. PAT (Advanced Level) Practise 1003 Emergency(SPFA+DFS)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  9. PAT 解题报告 1003. Emergency (25)

    1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...

随机推荐

  1. Linux SCIM/fcitx/ibus 输入法

    现在很多发行版linux一般都是装好scim scim-tables-zh 重启就行 但有时重启后还是不能调用 可以用如下方法: 添加文件: sudo gedit /etc/X11/xinit/xin ...

  2. 17 - 路径操作-shutil模块

    目录 1 路径操作 1.1 os.path模块 1.2 pathlib模块 1.2.1 目录操作 1.2.2 文件操作 1.3 os 模块 2 shutil模块 2.1 copy复制 2.2 rm删除 ...

  3. python第三方库之numpy基础

    前言 numpy是python的科学计算模块,底层实现用c代码,运算效率很高.numpy的核心是矩阵narray运算. narray介绍 矩阵拥有的属性 ndim属性:维度个数 shape属性:维度大 ...

  4. elk系列1之入门安装与基本操作【转】

    preface 我们每天都要查看服务器的日志,一方面是为了开发的同事翻找日志,另一方面是巡检服务器查看日志,而随着服务器数量以及越来越多的业务上线,日志越来越多,人肉运维相当痛苦了,此时,参考现在非常 ...

  5. 【题解】BZOJ 3600: 没有人的算术——替罪羊树、线段树

    题目传送门 题意 具体的自己去上面看吧...反正不是权限题. 简单来说,就是定义了一类新的数,每个数是0或者为 \((x_L, x_R)\) ,同时定义比较大小的方式为:非零数大于零,否则按字典序比较 ...

  6. 在Linux上安装pycharm

    1.首先在官网下载pycharm并进行提取,将提取的文件夹放在/usr下面(或者任意位置) 2.然后vi /etc/hosts 编辑 将0.0.0.0 account.jetbrains.com添加到 ...

  7. Integer类实现方式和注意事项

    java.lang.Integer类的源代码: //定义一个长度为256的Integer数组 static final Integer[] cache = new Integer[-(-128) + ...

  8. 使用ExtJS做一个用户的增删改查

    extjs版本为4.2,用户数据放在静态list中存储 User.java package com.ext.demo.dao; public class User { private int id; ...

  9. python基础(6)---set、collections介绍

    1.set(集合) set和dict类似,也是一组key的集合,但不存储value.由于key不能重复,所以,在set中,没有重复的key. 集合和我们数学中集合的概念是一样的,也有交集.并集.差集. ...

  10. 久邦数码(3G门户)面试

    久邦数码(3G门户)面试 1.数组和链表的区别(为什么数组带有索引) 2.数据库(手写选出一个公司年龄最大的100个员工) 3.一百个数查找一个数 利用二分查找一个数在最差的情况下至少比较多少次 4. ...