1003. Emergency (25)

时间限制
400 ms
内存限制
32000 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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

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

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

参考http://www.cnblogs.com/yanhaiming/archive/2012/12/01/2797064.html

#include<iostream>
#include<cstring>
using namespace std;

const int N = 1000;
const int INF = 100000000;

//图的邻接矩阵
int road[N][N];

//标记某一节点是否被访问过
bool isVisited[N];

//记录每一节点的权值
int team_num[N];

int dis[N];

//最短路径的数目
int path_num =0;

//最大的医疗队的数目
int g_max_team_num = 0;

void initData()
{
int i,j;
for(i=0; i<N; i++)
{
isVisited[i] = false;
team_num[i] = 0;
dis[i] = INF;//初始化为无穷大.
for(j=0; j<N; j++)
{
road[i][j] = INF;
road[j][i] = INF;
}
}
}

//单源最短路径算法。
void Dijstra(int n,int src, int des)
{
int i,j;
for(i=0; i<n; i++)
dis[i] = road[src][i];
isVisited[src] = true;

for(i=0; i<n-1; i++)//最多循环n-1次就足够了,选n-1个最小值。
{
int minDis = INF;
int cur = 0;
for(j=0; j<n; j++)
if(!isVisited[j] && dis[j]<minDis)
{
minDis = dis[j];
cur = j;
}
if(minDis == INF) //已经完成了连通路径的遍历。
return;
//dis[cur]为dis数组中的最小值,访问节点cur.
isVisited[cur] = true;
//更新Dis数组的内容.
for(j=0; j<n; j++)
if(road[cur][j] <INF && dis[j] > dis[cur] + road[cur][j])
dis[j] = dis[cur] + road[cur][j];
}
}
//深度搜索来得到最短路径的数目。
void dfs(int n,int cId,int des,int curDis,int curTeamsNum)
{
isVisited[cId] = true;
if(cId == des)
{
if(curDis == dis[des]) //找到一条最短路径
{
path_num++;//最短路径数目加1
if(curTeamsNum > g_max_team_num)
g_max_team_num = curTeamsNum;
}
return;
}
if(curDis > dis[des]) //当前的路径长度已经超过最短路径,就没有必要继续搜索了。
return;
//从城市cId开始搜索
for(int i=0; i<n; i++)
{
/*
if(!isVisited[i] && road[cId][i] < INF)//如果城市i没有被访问过,且cId到i连通。
{
//isVisited[i] = true;
dfs(n,i,des,curDis+road[cId][i],curTeamsNum+team_num[i]);
isVisited[i] = false;
}
*/
//这样的剪枝比上一种更加强大。
if(dis[cId] + road[cId][i] == dis[i])
dfs(n,i,des,curDis+road[cId][i],curTeamsNum+team_num[i]);
}
}

int main()
{
int i,j,n,m,c1,c2,L,src,des;

initData();

cin>>n>>m>>src>>des;
for(i=0; i<n; i++)
cin>>team_num[i];
for(i=0; i<m; i++)
{
cin>>c1>>c2>>L;
road[c1][c2] = L;
road[c2][c1] = L;
}

Dijstra(n,src,des);

//重置各city的被访问状态。
for(i=0; i<n; i++)
isVisited[i] = false;

dis[src] = 0;
dfs(n,src,des,0,team_num[src]);

cout<<path_num<<" "<<g_max_team_num<<endl;
return 0;
}

浙大 pat 1003 题解的更多相关文章

  1. 浙大pat 1035题解

    1035. Password (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To prepare f ...

  2. 浙大pat 1025题解

    1025. PAT Ranking (25) 时间限制 200 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Programmi ...

  3. 浙大pat 1011题解

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  4. 浙大PAT 7-06 题解

    #include <stdio.h> #include <iostream> #include <algorithm> #include <math.h> ...

  5. 浙大pat 1012题解

    1012. The Best Rank (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue To eval ...

  6. 浙大 pat 1038 题解

    1038. Recover the Smallest Number (30) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  7. 浙大 pat 1047题解

    1047. Student List for Course (25) 时间限制 400 ms 内存限制 64000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  8. 浙大pat 1054 题解

    1054. The Dominant Color (20) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard Behind the scen ...

  9. 浙大pat 1059 题解

    1059. Prime Factors (25) 时间限制 50 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given ...

随机推荐

  1. 顺手的Linux发行版及其工具推荐

    从Windows切换到Linux已经有半年多的时间了,简单给大家推荐一些个人感觉不错的软件,主要都是和开发相关的通用软件--- 0.archlinux  挑一个比较顺手的linux发行版当然是首要任务 ...

  2. 教你用shell写CGI程序

    以前用shell写过一些cgi的例子.今天向大家介绍一下. CGI是一种接口的标准,并不区分编程语言,也就是说,CGI可以用任何一种语言编写,只要这种语言具有标准输入.输出和环境变量.CGI会将标准输 ...

  3. 对中级 Linux 用户有用的 20 个命令

    也许你已经发现第一篇文章非常的有用,这篇文章是继对初级Linux用户非常有用的20个命令的一个延伸. 第一篇文章的目的是为新手准备的而这篇文章则是为了Linux的中高级用户.在这里你将学会如何进行自定 ...

  4. 【NET】Winform用户控件的初步封装之编辑控件

    编辑控件 public abstract partial class TEditorBase <TEntity, TRepository, TSqlStrConstruct> : User ...

  5. ASP.NET MVC页面UI之联动下拉选择控件(省、市、县联动选择)

    地区选择操作在WEB应用中比较常见的操作,本文在.net mvc3下实现了省市县三级联动选择功能. 本文博客出处:http://www.kwstu.com/ArticleView/admin_2013 ...

  6. 网络爬虫的C++程序

    [搜片神器]之DHT网络爬虫的C++程序初步开源 回应大家的要求,特地整理了一开始自己整合的代码,这样最简单,最直接的可以分析流程,至于文章里面提供的程序界面更多,需要大家自己开发. 谢谢园子朋友的支 ...

  7. 映射请求到Servlet

    Servlet规范当中对映射请求的描述: 在收到客户端请求时,web 容器确定转发到哪一个Web应用.选择的Web应用必须具有最长的上下文路径匹配请求URL的开始.当映射到Servlet时,URL匹配 ...

  8. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  9. D3DXCreateTextureFromFileInMemoryEx函数

    注:限于翻译水平限制,详情请查阅MSDN D3DXCreateTextureFromFileInMemoryEx 函数 从内存文件创建一个纹理,这是个比D3DXCreateTextureFromFil ...

  10. DBCC用法汇总

    本文摘自http://www.cnblogs.com/lilycnblogs/archive/2011/03/31/2001372.html 留作查阅 DBCC是SQL Server提供的一组控制台命 ...