Uputstvo
Pošto grane idu od manjeg broja ka većem, redosled 1, 2, …, n je već topološki – nije potreban Kahn. Prođi čvorove redom i relaksiraj izlazne grane.
Rešenje (C++)
#include <iostream>
#include <vector>
using namespace std;
const long long INF = 1e18;
int main() {
int n, m;
cin >> n >> m;
vector<vector<pair<int, int>>> graf(n + 1);
for (int i = 0; i < m; i++) {
int u, v, c;
cin >> u >> v >> c;
graf[u].push_back({v, c});
}
vector<long long> d(n + 1, INF);
d[1] = 0;
for (int v = 1; v <= n; v++) { // 1..n je topološki redosled
if (d[v] == INF) continue;
for (auto [u, c] : graf[v])
if (d[v] + c < d[u]) d[u] = d[v] + c;
}
if (d[n] == INF) cout << "NEMA" << endl;
else cout << d[n] << endl;
return 0;
}