Pagini recente » Cod sursa (job #571349) | Cod sursa (job #2800472) | Cod sursa (job #2869050) | Cod sursa (job #816525) | Cod sursa (job #2972613)
#define MAX_N 50000
#define INF 0x3f3f3f3f
#include <iostream>
#include <fstream>
#include <vector>
#include <tuple>
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
int n, m, c[MAX_N + 1];
vector<tuple<int, int>> g[MAX_N + 1];
int main()
{
fin >> n >> m;
for (int i = 2; i <= n; ++i)
c[i] = INF;
for (int i = 1; i <= m; ++i)
{
int x, y, c;
fin >> x >> y >> c;
g[x].emplace_back(y, c);
}
bool ncycle = false;
for (int count = 1; count <= n; ++count)
{
for (int node = 1; node <= n; ++node)
{
for (auto& edge : g[node])
{
if ((c[node] != INF) && ((c[node] + get<1>(edge)) < c[get<0>(edge)]))
{
if (count == n)
{
ncycle = true;
break;
}
c[get<0>(edge)] = c[node] + get<1>(edge);
}
}
if (ncycle)
break;
}
if (ncycle)
break;
}
if (ncycle)
fout << "Ciclu negativ!";
else
for (int i = 2; i <= n; ++i)
fout << c[i] << ' ';
fin.close();
fout.close();
return 0;
}