Pagini recente » Monitorul de evaluare | info.conc.sept.2 | Cod sursa (job #770840) | Cod sursa (job #528852) | Cod sursa (job #2158891)
#include <iostream>
#include <fstream>
#include <iostream>
#include <vector>
#include <queue>
#define inf 0x3f3f3f
#define nmax 250001
#define mmax 50005
using namespace std;
ifstream fin("bellmanford.in");
ofstream fout("bellmanford.out");
vector < pair < int, int > > v[nmax];
queue<int>coada;
int n,m,x,y,z,d[mmax],inqueue[mmax],varf,nr[mmax];
void read()
{
fin>>n>>m;
for(int i =1 ; i <= m ; i++)
{
fin>>x>>y>>z;
v[x].push_back(make_pair(y,z));
}
}
int main()
{
read();
for(int i =2 ; i <= n ; i++)
d[i]=inf;
d[1]=0;
coada.push(1);
inqueue[1]=1;
while(!coada.empty())
{
int varf=coada.front();
coada.pop();
inqueue[varf]=0;
for(int i = 0 ; i < v[varf].size(); i++)
if(d[varf]+v[varf][i].second < d[v[varf][i].first])
{
d[v[varf][i].first]=d[varf]+v[varf][i].second;
if(inqueue[v[varf][i].first]==0)
{
coada.push(v[varf][i].first);
inqueue[v[varf][i].first]=1;
nr[v[varf][i].first]++;
if(nr[v[varf][i].first]==n)
{
fout<<"Ciclu negativ!";
return 0;
}
}
}
}
for(int i =2; i <= n ; i++)
fout<<d[i]<<" ";
fout<<'\n';
return 0;
}