Cod sursa(job #879046)

Utilizator sanzianaioneteIonete Sanziana sanzianaionete Data 14 februarie 2013 21:55:20
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<cstdio>
#include<vector>
using namespace std;
int m,n,d[50001],x,y,c,k,inf=100000000,Min;
bool sel[50001],ok=true;
vector <pair <int, int> > a[50001];
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for(int i=2;i<=n;++i) d[i]=inf;
    for(int i=0;i<m;++i)
    {
        scanf("%d %d %d\n",&x,&y,&c);
        a[x].push_back(make_pair(y,c));
        if(x==1) d[y]=c;
    }
    sel[1]=true;
    while(ok)
    {
        Min=inf;
        for(int i=1;i<=n;++i)
        {
            if(Min>d[i]&&!sel[i])
            {
                Min=d[i];
                k=i;
            }
        }
        if(Min==inf) ok=false;
        else sel[k]=true;
        for(int i=2;i<=n;++i)
            if(!sel[i])
                for(int j=0;j<a[k].size();++j)
                    if(a[k][j].first==i)
                        if(d[i]>d[k]+a[k][j].second) d[i]=d[k]+a[k][j].second;
    }
    for(int i=2;i<=n;++i)
    {
        if(d[i]==inf) printf("0 ");
        else printf("%d ",d[i]);
    }
    printf("\n");
    fclose(stdin); fclose(stdout);
    return 0;
}