Used to describe with Java.
Go to Java
#include <bits/stdc++.h>
using namespace std;
const int N = 5e2 + 10, M = 1e4 + 10;
int dist[N], backup[N];
bool st[N];
int n, m, k;
struct Edge {
int a, b, c;
}e[M];
int bellman_ford() {
for (int i = 0; i < k; i++) {
memcpy(backup, dist, sizeof dist);
for (int i = 0; i < m; i++) {
auto t = e[i];
int a = t.a, b = t.b, c = t.c;
if (dist[b] > backup[a] + c)
dist[b] = backup[a] + c;
}
}
if (dist[n] > (0x3f3f3f3f) >> 1) return -1;
return dist[n];
}
int main() {
ios::sync_with_stdio(0);
cin >> n >> m >> k;
memset(dist, 0x3f, sizeof dist);
dist[1] = 0;
for (int i = 0; i < m; i++) {
int a, b, c;
cin >> a >> b >> c;
e[i] = {a, b, c};
}
int t = bellman_ford();
if (t == -1) cout << "impossible" << endl;
else cout << t << endl;
return 0;
}