Cod sursa(job #1187252)

Utilizator badea_adi1999Badea Adrian Catalin badea_adi1999 Data 17 mai 2014 23:30:16
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <algorithm>
using namespace std;
FILE *f=fopen("dijsktra.in","r");
FILE *g=fopen("dijsktra.out","w");
int n,m,st[50001],fi[50001],nrc,c[500000],k[50001];

struct elem{int a;int b;int c;};
elem v[250001];

bool compar(const elem &x,const elem &y)
{if (x.a<y.a) return false;
if (x.a==y.a&&x.b<y.b) return false;
return true;
}

int main()
{int i,j;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=m;i++) fscanf(f,"%d %d %d\n",&v[i].a,&v[i].b,&v[i].c);
sort(v+1,v+m+1,compar);
for (i=1;i<=n;i++) {st[i]=1000000;fi[i]=-1;k[i]=1<<30;}
for (i=1;i<=m;i++) {st[v[i].a]=min(st[v[i].a],i);
                    fi[v[i].a]=max(fi[v[i].a],i);}
nrc=1;
c[1]=1;
k[1]=0;

for (i=1;i<=nrc;i++)
            for (j=st[c[i]];j<=fi[c[i]];j++)

                         {if (k[v[j].a]+v[j].c<k[v[j].b]) {k[v[j].b]=k[v[j].a]+v[j].c;
                                                           c[++nrc]=v[j].b;
                                                           }
                          }
for (i=2;i<=n;i++) fprintf(g,"%d ",k[i]);

return 0;
}