Pagini recente » Borderou de evaluare (job #1033190) | Cod sursa (job #1804055) | Diferente pentru template/onis-2014/header intre reviziile 31 si 6 | Borderou de evaluare (job #1852726) | Cod sursa (job #2654101)
#include <fstream>
using namespace std;
ifstream f ("bellmanford.in");
ofstream g ("bellmanford.out");
struct muchie {
int x, y, cost;
}v[250005];
int n, m;
int dist[50005];
const int INF = 50000000;
void BellmanFord (int start)
{
for (int i=1; i<=n; i++)
dist[i] = INF;
dist[start] = 0;
for (int i=1; i<=n-1; i++)
{
for (int j=1; j<=m; j++)
{
if (dist[v[j].x] + v[j].cost < dist[v[j].y])
dist[v[j].y] = dist[v[j].x] + v[j].cost;
}
}
}
bool NegativeCycle ()
{
for (int i=1; i<=m; i++)
{
if (dist[v[i].x] + v[i].cost < dist[v[i].y])
return true;
}
return false;
}
void Print ()
{
for (int i=2; i<=n; i++)
g << dist[i] << " ";
}
int main()
{
f >> n >> m;
for (int i=1; i<=n; i++)
{
f >> v[i].x >> v[i].y;
f >> v[i].cost;
}
BellmanFord(1);
if (!NegativeCycle()) Print();
else g << "Ciclu negativ!";
return 0;
}