PAT甲级1003. Emergency
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的更多相关文章
- 图论 - PAT甲级 1003 Emergency C++
PAT甲级 1003 Emergency C++ As an emergency rescue team leader of a city, you are given a special map o ...
- PAT 甲级 1003. Emergency (25)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- 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
https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376 As an emergency rescue ...
- PAT Advanced 1003 Emergency 详解
题目与翻译 1003 Emergency 紧急情况 (25分) As an emergency rescue team leader of a city, you are given a specia ...
- 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 ...
- PAT甲级1003题解——Dijkstra
解题步骤: 1.初始化:设置mat[][]存放点之间的距离,vis[]存放点的选取情况,people[]存放初始时每个城市的人数,man[]存放到达每个城市的救援队的最多的人数,num[]存放到达每个 ...
- PAT (Advanced Level) Practise 1003 Emergency(SPFA+DFS)
1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...
- PAT 解题报告 1003. Emergency (25)
1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...
随机推荐
- 【shell】shell编程(五)-读取参数
通过前几篇文章的学习,我们学会了shell的基本语法.在linux的实际操作中,我们经常看到命令会有很多参数,例如:ls -al 等等,那么这个参数是怎么处理的呢? 接下来我们就来看看shell脚本对 ...
- Linux mint 18.1 / Ubuntu 16.04 安装steam
这里以Limit Mint 18.1为例: 安装steam: sudo dpkg -i steam.deb 运行后会有如下错误: 直接运行如下命令修复, 并自动启动steam: LD_PRELOAD= ...
- 利用gcc的__attribute__编译属性section子项构建初始化函数表【转】
转自:https://my.oschina.net/u/180497/blog/177206 gcc的__attribute__编译属性有很多子项,用于改变作用对象的特性.这里讨论section子项的 ...
- ansible 下lineinfile详细使用 【转】
转自 ansible 下lineinfile详细使用 - 散人 - 51CTO技术博客http://zouqingyun.blog.51cto.com/782246/1882367 一.简述 这几天在 ...
- 通过复制(拷贝)新建javaweb项目报错无法访问
我们有时候为了方便,用eclipse在原来动态web项目上直接复制,粘贴项目,来形成以一个新的项目.可是运行的时候,它显示的url地址,还是原来的项目地址.初步判定,有可能是eclipse配置的问题. ...
- tcgetattr函数与tcsetattr函数控制终端
6.4.4 使用tcgetattr函数与tcsetattr函数控制终端 为了便于通过程序来获得和修改终端参数,Linux还提供了tcgetattr函数和tcsetattr函数.tcgetattr用于 ...
- [置顶]
人工智能(深度学习)加速芯片论文阅读笔记 (已添加ISSCC17,FPGA17...ISCA17...)
这是一个导读,可以快速找到我记录的关于人工智能(深度学习)加速芯片论文阅读笔记. ISSCC 2017 Session14 Deep Learning Processors: ISSCC 2017关于 ...
- 关于语义化版本(semantic versioning or SemVer)
1 为什么要有SemVer? SemVer用来规范组件之间的依赖版本,它使用一个版本号来传递出组件的API的变化情况. 在理解这规范之后,看一眼依赖包的版本号,就知道API的变化(兼容性)程度,方便 ...
- EF – 7.一对多关联
5.6.8 <一对多关联(上)> 5.6.9 <一对多关联(下)> 一对多的关联,可以说是整个数据库应用程序中最常见的一种关联类型了,因此,必须高度重视这种关联类型CRUD的实 ...
- beego离线安装及运行
官网: https://beego.me/ 由于公司上不了网,啥都得下载到本地来弄. go的安装不多说了,GOPATH要设置好的. 先离线下载好https://github.com/astaxie/b ...