作者:
Jesus
,
2022-04-21 22:20:00
,
所有人可见
,
阅读 4
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int N = 510, M = 10010;
int n, m, k;
int dis[N], last[N];
struct Edge {
int a, b, c;
}edges[M];
void bellman_ford() {
memset(dis, 0x3f, sizeof(dis));
dis[1] = 0;
for (int i = 0; i < k; i++) {
memcpy(last, dis, sizeof(dis));
for (int j = 0; j < m; j++) {
auto t = edges[j];
dis[t.b] = min(dis[t.b], last[t.a] + t.c);
}
}
}
int main() {
cin >> n >> m >> k;
for (int i = 0; i < m; i++) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
edges[i] = {a, b, c};
}
bellman_ford();
if (dis[n] > 0x3f3f3f3f / 2) cout << "impossible" << endl;
else cout << dis[n] << endl;
return 0;
}