You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.5 KiB

#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
const int N = 310;
int t, n, m, q, u, v, w;
int mp[N][N];
bool flag[N]; // 记录是否标记
void floyd(int k) {
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
if (mp[i][j] > mp[i][k] + mp[k][j])
mp[i][j] = mp[i][k] + mp[k][j];
}
int main() {
// 加快读入
ios::sync_with_stdio(false), cin.tie(0);
while (cin >> n >> m >> q && n + m + q) {
if (t) printf("\n"); // 谜之格式
printf("Case %d:\n", ++t);
memset(mp, inf, sizeof mp);
memset(flag, false, sizeof flag);
for (int i = 0; i <= n; i++) mp[i][i] = 0;
while (m--) {
cin >> u >> v >> w;
if (w < mp[u][v]) mp[u][v] = w;
}
while (q--) {
cin >> w;
if (w == 0) {
cin >> u;
if (flag[u])
printf("ERROR! At point %d\n", u);
else {
flag[u] = true;
floyd(u);
}
} else {
cin >> u >> v;
if (!(flag[u] && flag[v]))
printf("ERROR! At path %d to %d\n", u, v);
else if (mp[u][v] == inf)
printf("No such path\n");
else
printf("%d\n", mp[u][v]);
}
}
}
return 0;
}