Pagini recente » Monitorul de evaluare | Cod sursa (job #1553558) | Monitorul de evaluare | Istoria paginii runda/concurs12345 | Cod sursa (job #2179344)
#include <cstdio>
#include <vector>
#include <deque>
#define INF 2000000000
using namespace std;
vector <pair <int,int> > v[50001];
deque <int> dq;
int c[50001],f[50001];
int main()
{
FILE *fin=fopen ("bellmanford.in","r");
FILE *fout=fopen ("bellmanford.out","w");
int n,m,i,nod,vecin,x,y,cst;
fscanf (fin,"%d%d",&n,&m);
for (i=1;i<=m;i++){
fscanf (fin,"%d%d%d",&x,&y,&cst);
v[x].push_back(make_pair (y,cst));
}
for (i=2;i<=n;i++)
c[i]=INF;
dq.push_back(1);
f[1]=1;
while (dq.size()){
nod=dq.front();
for (i=0;i<v[nod].size();i++){
vecin=v[nod][i].first;
if (c[nod]+v[nod][i].second<c[vecin]){
c[vecin]=c[nod]+v[nod][i].second;
if (!f[vecin]) {// nu e in deque
f[vecin]=1;
dq.push_back(vecin);
}
}
}
f[nod]=0;
dq.pop_front();
}
for (i=2;i<=n;i++){
nod=i;
for (int j=0;j<v[nod].size();j++){
vecin=v[nod][j].first;
if (vecin==1 && c[vecin]+v[nod][j].second<0){
fprintf (fout,"Ciclu negativ!");
return 0;
}
}
}
for (i=2;i<=n;i++)
fprintf (fout,"%d ",c[i]);
return 0;
}