Pagini recente » Cod sursa (job #717088) | Cod sursa (job #1077430) | Cod sursa (job #133106) | Cod sursa (job #2032518) | Cod sursa (job #2796287)
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pf push_front
#define MOD 1000000007
#define NMAX 50005
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
struct A
{
int y, cost;
};
struct B
{
int x, r;
};
struct crt
{
bool operator()(B x, B y) {return x.r <= y.r;}
};
vector < A > v[NMAX];
set < B, crt > s;
int main()
{
ios_base::sync_with_stdio(false), cin.tie(0),cout.tie(0);
int n, m, x, y, z, i, nr[NMAX], r[NMAX];
fin >> n >> m;
while(m--)
{
fin >> x >> y >> z;
v[x].pb({y, z});
}
for(i = 1; i <= n; i++) nr[i] = 0, r[i] = INT_MAX;
r[1] = 0, s.insert({1, 0});
while(s.empty() == 0)
{
x = (*s.begin()).x, s.erase(s.begin());
nr[x]++;
if(nr[x] == n)
{
fout << "Ciclu negativ!";
break;
}
else for(auto it:v[x]) if(r[x] + it.cost < r[it.y]) r[it.y] = r[x] + it.cost, s.insert({it.y, r[it.y]});
}
if(nr[x] != n) for(i = 2; i <= n; i++) fout << r[i] << ' ';
return 0;
}