Pagini recente » Cod sursa (job #1955688) | Cod sursa (job #39179) | Cod sursa (job #630753) | Cod sursa (job #897272) | Cod sursa (job #1537651)
#include <cstring>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int maxN = 50000;
const int maxM = 250000;
const int infi = 1 << 30;
int N, M, d[maxN], f[maxN];
typedef pair<int, int> muchie; /// first = nodul, second = lungimea
vector<muchie> G[maxN + 1];
int main() {
freopen("bellmanford.in", "r", stdin);
freopen("bellmanford.out", "w", stdout);
scanf("%d %d", &N, &M);
for(register int i = 1; i <= M; ++ i) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
G[a].push_back(make_pair(b, c));
}
queue<int> C;
for(register int i = 2; i <= N; ++ i)
d[i] = infi;
d[1] = d[0] = 0;
C.push(1);
while(!C.empty()) {
int x = C.front(); C.pop();
for(auto it = G[x].begin(); it != G[x].end(); ++ it) {
int its = it->second, itf = it->first;
if(d[x] + its < d[itf]) {
d[itf] = d[x] + its;
++ f[itf];
if(f[itf] > N) {
puts("Ciclu negativ!");
return 0;
}
C.push(it->first);
}
}
}
for(register int i = 2; i <= N; ++ i)
printf("%d ", d[i] == infi ? 0 : d[i]);
printf("\n");
return 0;
}