题目链接:poj1122 FDNY to the Rescue!

题意:给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路口之间没有直接路径,再给出火警位置所在的交叉路口 和 一个或多个消防站所处的交叉路口位置。输出要求按消防站到火警位置所需时间从小到大排列,输出信息包括消防站位置(初始位置),火警位置(目标位置),所需时间,最短路径上每个交叉路口。

题解:反向建图,从火警位置求一次最短路,求最短路时记录路径,按时间从小到大输出。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#define CLR(a,b) memset((a),(b),sizeof((a)))
using namespace std; const int inf = 0x3f3f3f3f;
const int N = ;
int n, fire;
int g[N][N];//邻接矩阵存图
int s[N], d[N];
int path[N];//表示v0到vi最短路径顶点vi的前一个顶点序号
int shortest[N];//存储最短路径上的各个顶点序号
struct node{
int u, v, t;
}a[N];
int cmp(node a, node b){
return a.t < b.t;
}
void dij(){
int i, j, k;
CLR(s, );
for(i = ; i <= n; ++i){
d[i] = g[fire][i];
if(i != fire)
path[i] = fire;
else
path[i] = -;
}
s[fire] = ;
d[fire] = ;
for(i = ; i < n-; ++i){
int mi = inf, u = ;
for(j = ; j <= n ; ++j){
if(!s[j] && d[j] < mi){
u = j; mi = d[j];
}
}
s[u] = ;
for(k = ; k <= n; ++k){
if(!s[k] && d[u] + g[u][k] < d[k]){
d[k] = d[u] + g[u][k];
path[k] = u;
}
}
}
}
int main(){
int i, j, x, cnt;
scanf("%d", &n);
for(i = ; i <= n; ++i){//边反向存储
for(j = ; j <= n; ++j){
scanf("%d", &x);
if(x == -)
g[j][i] = inf;
else
g[j][i] = x;
}
}
scanf("%d", &fire);
dij();
cnt = ;
while(scanf("%d", &x) == ){
a[cnt].u = x;
a[cnt].v = fire;
a[cnt++].t = d[x];
}
sort(a, a+cnt, cmp);
printf("Org\tDest\tTime\tPath\n");
for(i = ; i < cnt; ++i){
printf("%d\t%d\t%d", a[i].u, a[i].v, a[i].t);
CLR(shortest, );
int k = ;//表示shortest数组中最后一个元素的下标
shortest[k] = a[i].u;
while(path[shortest[k]] != -){
k++;
shortest[k] = path[shortest[k-]];
}
for(j = ; j <= k; ++j) //倒向追踪,但是反向建图,因此正向输出
printf("\t%d", shortest[j]);
puts("");
}
return ;
}

poj1122 FDNY to the Rescue!(dij+反向建图+输出路径)的更多相关文章

  1. POJ-1122 FDNY to the Rescue!---Dijkstra+反向建图

    题目链接: https://vjudge.net/problem/POJ-1122 题目大意: 给出矩阵,矩阵中每个元素tij表示从第i个交叉路口到第j个交叉路口所需时间,若tij为-1则表示两交叉路 ...

  2. HDU4857——逃生(反向建图+拓扑排序)(BestCoder Round #1)

    逃生 Description 糟糕的事情发生啦,现在大家都忙着逃命.但是逃命的通道很窄,大家只能排成一行. 现在有n个人,从1标号到n.同时有一些奇怪的约束条件,每个都形如:a必须在b之前.同时,社会 ...

  3. POJ3687——Labeling Balls(反向建图+拓扑排序)

    Labeling Balls DescriptionWindy has N balls of distinct weights from 1 unit to N units. Now he tries ...

  4. HDU 2647 Reward 【拓扑排序反向建图+队列】

    题目 Reward Dandelion's uncle is a boss of a factory. As the spring festival is coming , he wants to d ...

  5. HUD2647 Reward_反向建图拓扑排序

    HDU2647 Reward 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2647 题意:老板要发奖金了,有n个人,给你m对数,类似a b,这样的一对 ...

  6. HDU 3639 Hawk-and-Chicken(强连通缩点+反向建图)

    http://acm.hdu.edu.cn/showproblem.php?pid=3639 题意: 有一群孩子正在玩老鹰抓小鸡,由于想当老鹰的人不少,孩子们通过投票的方式产生,但是投票有这么一条规则 ...

  7. POJ 3268——Silver Cow Party——————【最短路、Dijkstra、反向建图】

    Silver Cow Party Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Su ...

  8. HPU 3639--Hawk-and-Chicken【SCC缩点反向建图 &amp;&amp; 求传递的最大值】

    Hawk-and-Chicken Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. CodeForces - 350B(反向建图,)

    B - Resort CodeForces - 350B B. Resort time limit per test 2 seconds memory limit per test 256 megab ...

随机推荐

  1. 通过数据库和EasyUI的combobox级联实现省市区三级联动

    1.新建一个web项目 2.因为这里用到了数据库所以我们在lib目录导入Hibernate的jar包.fastjson.jar包及数据库jar包 3.同样导入EasyUI的组件配置,并在新建的html ...

  2. [转]Linux下的暴力密码破解工具Hydra详解

    摘自:http://linzhibin824.blog.163.com/blog/static/735577102013144223127/ 这款暴力密码破解工具相当强大,支持几乎所有协议的在线密码破 ...

  3. 【转】Haproxy安装及配置

    1.安装 # wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz # tar zcvf haproxy-1.3.20.t ...

  4. EF实体框架常见问题

    1,无法为具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“System.Data.Entity.SqlServ ...

  5. poj 1410 线段相交判断

    http://poj.org/problem?id=1410 Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissi ...

  6. So easy Webservice 6.使用EndPoint发布webservice服务

    创建第一个Web服务: @WebService // 添加了此注解,代表是一个WebService public class HelloWorld { // 非 static final privat ...

  7. CSS笔记(一)CSS规则

    CSS是层叠式样式表(Cascading Style Sheets)的缩写,定义了如何显示HTML元素. CSS规则由两个主要的部分构成:选择器 + 一条或多条声明. 每条声明由一个属性和一个值构成. ...

  8. $.ajax() ,$.post(),$.get() 的用法

    在编写代码的过程中,我们会用到一些的需要局部刷新,而且需要数据传递的情况,我们通常是有$.ajax() ,$.post(),$.get() 这三种方式. $.ajax()方法通过 HTTP 请求加载远 ...

  9. 一致性 hash 算法( consistent hashing )

    consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛: 1 基 ...

  10. iOS - Xib

    前言 xib 文件可以被 Xcode 编译成 nib 文件,xib 文件本质上是一个 xml 文件,而 nib 文件就是编译后的二进制文件,该文件将视图等控件对象封装了起来,而在程序运行起来后,这些对 ...