Cod sursa(job #1276563)

Utilizator vladvaldezVlad Dimulescu vladvaldez Data 26 noiembrie 2014 16:22:12
Problema Algoritmul Bellman-Ford Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <vector>

using namespace std;
FILE *f=fopen("bellmanford.in","r");
FILE *g=fopen("bellmanford.out","w");

vector<int>a[50005];

int v[50005],n,m,x,y,z,use[50005],i,r;
void belmann(){

int i,c[500105],p,u,ct=0,nc;
vector<int>::iterator it;

p=1;
u=1;
c[p]=1;
for(i=2;i<=n;i++)
v[i]=20000008;
use[1]=1;

while(p<=u)
{
for(it=a[c[p]].begin();it!=a[c[p]].end();++it)
{
ct++;
if (ct%2==1)nc=*it;
else {
r=*it;
if (v[c[p]]+r<v[nc]){
    v[nc]=v[c[p]]+*it;
    if (use[nc]==0){u++;c[u]=nc;use[nc]=1;}
}
}
}

use[c[p]]=0;
p++;
}



}


int main()
{
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&x,&y,&z);
a[x].push_back(y);
a[x].push_back(z);
}

belmann();

for(i=2;i<=n;i++)
fprintf(g,"%d ",v[i]);
fclose(g);
return 0;
}