Pagini recente » Cod sursa (job #2760156) | Cod sursa (job #2274289) | Cod sursa (job #2276956) | Cod sursa (job #1788643) | Cod sursa (job #681609)
Cod sursa(job #681609)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define NMAX 50050
#define INF 0x3f3f3f3f
bool viz[NMAX];
int C[NMAX], IN[NMAX], N, M;
queue <int> Q;
vector < pair <int, int> > G[NMAX];
bool bellman_ford ();
void input (), output ();
int main () {
input ();
output ();
return 0;
}
bool bellman_ford () {
int nod, fiu, cst;
memset (C, INF, sizeof (C));
C[1] = 0; Q.push (1);
while (!Q.empty ()) {
nod = Q.front ();
for (vector < pair <int, int> >::iterator it = G[nod].begin (); it != G[nod].end (); it++) {
fiu = it -> first, cst = it -> second;
if (C[nod] + cst < C[fiu]) {
C[fiu] = C[nod] + cst;
if (!viz[fiu]) Q.push (fiu), viz[fiu] = 1, IN[fiu]++;
if (IN[fiu] > N) return 0;
}
}
Q.pop (); viz[nod] = 0;
}
return 1;
}
void input () {
freopen ("bellmanford.in", "r", stdin);
scanf ("%d %d", &N, &M);
int i, x, y, c;
for (i = 1; i <= M; i++) {
scanf ("%d %d %d", &x, &y, &c);
G[x].push_back (make_pair (y, c));
}
}
void output () {
freopen ("bellmanford.out", "w", stdout);
if (!bellman_ford ())
printf ("Ciclu negativ!");
else
for (int i = 2; i <= N; i++)
printf ("%d ", C[i]);
}