Cod sursa(job #1517139)

Utilizator andreii1Ilie Andrei andreii1 Data 3 noiembrie 2015 21:41:43
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include <cstdio>
#include <queue>
#include <limits.h>
#include <vector>
#define MAX 50000000
using namespace std;

FILE *f=fopen("dijkstra.in","r");
FILE *g=fopen("dijkstra.out","w");

int n,m,D[50010],nrr;
vector< pair<int,int> >v[50010];
priority_queue  < pair<int,int> > q;
int main()
{
    pair<int,int> aux;
    int i,x,y,c,nod,cost;
    fscanf(f,"%d %d",&n,&m);
    for(i=2;i<=n;i++)D[i]=MAX;
    for(i=1;i<=m;i++)
    {
        fscanf(f,"%d %d %d",&x,&y,&c);
        v[x].push_back(make_pair(c,y));
    }
    q.push(make_pair(0,1));
    int numar;
    while(!q.empty())
    {
        aux=q.top();
        q.pop();
        nod=aux.second;
        cost=-aux.first;
        numar=v[nod].size();
        for(i=0;i<numar;i++)
            {
                aux=v[nod][i];
                if(aux.first+cost<D[aux.second])
                {
                    D[aux.second]=aux.first+cost;
                    q.push(make_pair(-D[aux.second],aux.second));
                }
            }
    }
    for(i=2;i<=n;i++)
        if(D[i]==MAX)fprintf(g,"0 ");else fprintf(g,"%d ",D[i]);
    fclose(f);
    fclose(g);
    return 0;
}