Pagini recente » Cod sursa (job #2100899) | Cod sursa (job #1554675) | Cod sursa (job #1883578) | Cod sursa (job #2654239) | Cod sursa (job #2302824)
#include <bits/stdc++.h>
#define inf 1e9
#define NMAX 50005
using namespace std;
ifstream f ("bellmanford.in");
ofstream g ("bellmanford.out");
int N , M , i , j , x , y , cost, nod,d[NMAX];
int viz[NMAX];
vector <pair <int,int> > v[NMAX];
priority_queue <pair <int,int> , vector <pair <int,int > >, greater <pair<int,int> > > h ;
//first = cost
// second = nod
int main()
{
f >> N >> M ;
for (i = 1 ; i <= M ; ++i)
{
f >> x >> y >> cost ;
v[x].push_back(make_pair(cost , y));
}
for (i = 2 ; i <= N ; i ++)
d[i] = inf;
d[1] = 0;
h.push(make_pair(0,1));
while (!h.empty())
{
nod = h.top().second;
h.pop();
for (i = 0; i < v[nod].size(); ++i)
{
if (d[nod] + v[nod][i].first < d[v[nod][i].second])
{
d[v[nod][i].second] = d[nod] + v[nod][i].first;
h.push(make_pair(d[v[nod][i].second] , v[nod][i].second));
}
}
viz[nod] ++ ;
if (viz[nod] == N)
{
g << "Ciclu negativ!" ;
return 0;
}
}
for (i = 2 ; i <= N ; i ++)
if (d[i] == inf) g << 0 << " " ;
else g << d[i] << " " ;
f.close();
g.close();
return 0;
}