Pagini recente » Cod sursa (job #2165215) | Cod sursa (job #814032) | Cod sursa (job #2431480) | Cod sursa (job #2950763) | Cod sursa (job #1722095)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define mkp make_pair
#define drum pair<int,int>
#define d first
#define l second
#define NMAX 50005
#define inf 2000000000
using namespace std;
ifstream si("bellmanford.in");
ofstream so("bellmanford.out");
vector<drum> v[NMAX];
queue<int> q;
int minn[NMAX];
int ap[NMAX],rn;
int dijkstra()
{
q.push(1);
int x,n,i;
while(!q.empty())
{
x=q.front();
ap[x]++;
if(ap[x]>rn)
return 0;
q.pop();
n=v[x].size();
for(i=0;i<n;++i)
{
if(minn[v[x][i].d]>minn[x]+v[x][i].l)
{
minn[v[x][i].d]=minn[x]+v[x][i].l;
q.push(v[x][i].d);
}
}
}
return 1;
}
int main()
{
int n,m;
rn=n;
si>>n>>m;
int i,a,b,c;
for(i=0;i<m;++i)
{
si>>a>>b>>c;
v[a].push_back(mkp(b,c));
}
for(i=2;i<=n;++i)
minn[i]=inf;
if(!dijkstra())
{
so<<"Ciclu negativ!";
}
else
for(i=2;i<=n;++i)
if(minn[i]==inf)
so<<0<<' ';
else
so<<minn[i]<<' ';
so<<'\n';
so.close();
return 0;
}