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. 环境变量配错了 command not found

    一般就是忘记在PATH 前面加$ 1.可以用whereis或者which命令查看一下有没有这个命令 具体执行which lswhereis ls 2.系统环境变量导致的问题解决方案: exportPA ...

  2. queue_delayed_work和queue_work区别 (转http://blog.csdn.net/dosculler/article/details/7968101)

    queue_delayed_work和queue_work 一.参考文献: 1)http://www.linuxidc.com/Linux/2011-08/41655.htm queue_delaye ...

  3. cpu几种架构区别

    转自:http://smilejay.com/2012/07/intel-procssor-architecture/ (1)x86 (IA-32,i386,x86-32,x32) x86是指基于In ...

  4. Machine Learning系列--隐马尔可夫模型的三大问题及求解方法

    本文主要介绍隐马尔可夫模型以及该模型中的三大问题的解决方法. 隐马尔可夫模型的是处理序列问题的统计学模型,描述的过程为:由隐马尔科夫链随机生成不可观测的状态随机序列,然后各个状态分别生成一个观测,从而 ...

  5. Machine Learning系列--归一化方法总结

    一.数据的标准化(normalization)和归一化 数据的标准化(normalization)是将数据按比例缩放,使之落入一个小的特定区间.在某些比较和评价的指标处理中经常会用到,去除数据的单位限 ...

  6. Feign 发送对象,对象含多个文件

    Feign在发送文件时,可以使用Feign-form. 另一种方式,关键就是,要将文件转成Resource,然后使用Spring的MultivalueMap 本次发送的是个对象,对象里含有 文件对象数 ...

  7. 使用extjs做的一个简单grid

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  8. CPU运行时间——time

    用途说明time命令常用于测量一个命令的运行时间,注意不是用来显示和修改系统时间的(这是date命令干的事情).但是今天我通过查看time命令的手册页,发现它能做的不仅仅是测量运行时间,还可以测量内存 ...

  9. HDU 5348 MZL's endless loop(DFS去奇数度点+欧拉回路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题目大意:给你一张图,有n个点,和m条无向边,让你把m条无向边变成有向边,使得每个节点的|出度- ...

  10. golang基础之三-字符串,时间,流程控制,函数

    strings和strconv的使用 strings strings.HasPrefix(s string,preffix string) bool:判断字符串s是否以prefix开头 stirngs ...