Pagini recente » Cod sursa (job #2828496) | Cod sursa (job #407884) | Cod sursa (job #1079605) | Cod sursa (job #2962682) | Cod sursa (job #3251985)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
using PII = pair<int, int>;
ifstream f("bellmanford.in");
ofstream g("bellmanford.out");
static constexpr int nMAX = ((int)(5e4) + 4), INF = ((int)(1e9));
int n;
vector<PII> G[nMAX];
void load_graph()
{
f >> n;
int m = 0;
f >> m;
int x = 0, y = 0, z = 0;
for (int i = 1; i <= m; ++i)
{
f >> x >> y >> z,
G[x].push_back({z, y});
}
return;
}
int main()
{
load_graph();
vector<int> d((n + 1), INF);
vector<bool> in_queue((n + 1), false);
vector<int> counts((n + 1), 0);
queue<int> Q;
d[1] = 0, in_queue[1] = true, counts[1] = 1, Q.push(1);
while (!Q.empty())
{
int node = Q.front();
Q.pop();
in_queue[node] = false;
for (const PII &it : G[node])
if ((d[node] + it.first) < d[it.second])
{
d[it.second] = (d[node] + it.first);
if (in_queue[it.second])
continue;
++counts[it.second];
if (counts[it.second] >= n)
{
g << "Ciclu negativ!\n";
return 0;
}
in_queue[it.second] = true, Q.push(it.second);
}
}
for (int i = 2; i <= n; ++i)
{
g << d[i];
if (i != n)
g << ' ';
else
g << '\n';
}
return 0;
}