题目:http://codevs.cn/problem/1021/
思路:使用floyd算法求解最优时间,并记录在不堵车情况(理想状态)下最优路径。枚举所有路径上的道路,计算在该路径无法通过时的最优时间,记录最长的最优时间。道路为双向车道,所以一条道路数据代表两条不同的道路。如果到达城市b的道路有m条,则b出现在floyd处理队列的次数可能为m。
题解:
/* 1021 玛丽卡 */
#include <stdio.h>
#define DEBUG
#define MAXN 1001 /* 最大城市数 */
#define MAXM 1000000 /* 最多道路数 */
#define MAXV 1001 /* 最长通过时间 */
#define JAMF -1 /* 道路无法通过标识 */
#define ALLM 1000000 /* 所有道路时间总和 */
/* 道路列表 */
struct _road{
int a; /* 出发城市 a */
int b; /* 到达城市 b */
int v; /* 使用时间 v */
int next; /* 城市a下一条道路编号 */
int city; /* 城市a第一条道路编号 */
}roads[MAXM];