Pagini recente » Cod sursa (job #2853938) | Cod sursa (job #1079573) | Cod sursa (job #2057977) | Cod sursa (job #2815984) | Cod sursa (job #2808648)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin ( "bellmanford.in" );
ofstream cout ( "bellmanford.out" );
#define NMAX 50000
#define INF ( 1 << 30 )
struct graph {
int node, cost;
};
int dist[NMAX + 1];
vector<graph> G[NMAX + 1];
void bellman_ford( int n, int source ) {
int i, ans = 0;
for ( i = 1; i <= n; i++ ) {
dist[i] = INF;
}
dist[source] = 0;
for ( i = 1; i <= n; i++ ) {
for ( graph copil : G[i] ) {
if ( dist[i] != INF && dist[i] + copil.cost < dist[copil.node] ) {
dist[copil.node] = dist[i] + copil.cost;
}
}
}
for ( i = 1; i <= n; i++ ) {
for ( graph copil : G[i] ) {
if ( dist[i] != INF && dist[i] + copil.cost < dist[copil.node] ) {
dist[copil.node] = dist[i] + copil.cost;
}
}
}
for ( graph copil : G[1] ) {
if ( dist[copil.node] != INF && dist[copil.node] > dist[1] + copil.cost ) {
cout << "Ciclu negativ!";
return ;
}
}
for ( i = 2; i <= n; i++ ) {
cout << dist[i] << " ";
}
}
int main() {
int n, m, i, a, b, c;
cin >> n >> m;
for ( i = 1; i <= m; i++ ) {
cin >> a >> b >> c;
G[a].push_back({b, c});
}
bellman_ford(n, 1);
return 0;
}