#include <iostream>
#define INF 0x3f3f3f3f //0x十六进制前缀,接近无穷大
#define MAXN 102
using namespace std;
int map[MAXN][MAXN], n, m, q, u, v, l;
void init() //初始化
{
for (int i = 0; i <= n; i++)
for (int j = 0; j <= n; j++)
map[i][j] = i == j ? 0 : INF; //0和正无穷
}
inline int Max(int a, int b) //手搓最大值
{
return a > b ? a : b;
}
inline int Min(int a, int b) //手搓最小值
{
return a < b ? a : b;
}
void floyd() //朴素的Floyd算法,求解多源最短路径
{
for (int k = 1; k <= n; k++) //k是中继点
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
map[i][j] = Min(map[i][j], Max(map[i][k], map[k][j])); //针对题目的最大噪声做的变化
}
int main()
{
int cas = 1;
while (cin >> n >> m >> q)
{
init();
while (m--)
{
cin >> u >> v >> l;
if (map[u][v] > l)
{
map[u][v] = l;
map[v][u] = l;
}
}
cout << "Case #" << cas << endl;
floyd();
while (q--)
{
cin >> u >> v;
if (map[u][v] >= INF)
cout << "no path" << endl;
else
cout << map[u][v] << endl;
}
cas++;
}
return 0;
}
P1743 Audiophobia (注释详解)
最新推荐文章于 2024-05-11 14:30:05 发布