Pagini recente » Cod sursa (job #530966) | Cod sursa (job #2436580) | Cod sursa (job #2051301) | Cod sursa (job #1785960) | Cod sursa (job #419098)
Cod sursa(job #419098)
#include<stdio.h>
#include<vector>
#define inf 250000001
using namespace std;
vector<int> vecini[50001];
vector<int> costuri[50001];
vector<int> coada;
vector<int> coada2;
int main()
{
freopen("bellmanford.in","r",stdin);
freopen("bellmanford.out","w",stdout);
int n,m,d[50001],x,y,c;
scanf("%d %d",&n,&m);
d[1]=inf;
for(int i=2; i<=n; ++i) { d[i]=inf; coada.push_back(i); }
for(int i=1; i<=m; ++i)
{
scanf("%d %d %d", &x,&y,&c);
vecini[x].push_back(y);
costuri[x].push_back(c);
if(x==1) d[y]=c;
}
//printf("%d %d",vecini[3][0],costuri[3][0]);
//printf("\n");
int gata=0,j;
for(j=1;j<=m&&(!gata)&&(!coada.empty());++j)
{
gata=1;
for(int i=0; i<coada.size(); ++i)
{
for(int k=0; k<vecini[coada[i]].size(); ++k)
if( d[vecini[ coada[i] ][k]]>d[coada[i]]+costuri[coada[i]][k] )
{
d[vecini[coada[i]][k]]=d[coada[i]]+costuri[coada[i]][k];
gata=0;
coada2.push_back(vecini[coada[i]][k]);
}
}
coada=coada2;
coada2.clear();
}
if(!gata) printf("Ciclu negativ!");
else for(int i=2; i<=n; ++i) printf("%d ",d[i]);
return 0;
}