Cod sursa(job #1968839)

Utilizator caprariuapCaprariu Alin-Paul caprariuap Data 17 aprilie 2017 21:41:52
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <stack>
#include <iomanip>
#include <queue>
using namespace std;

FILE *fin=fopen("dijkstra.in","r");
FILE *fout=fopen("dijkstra.out","w");

const int inf=0x3f3f3f3f;
priority_queue <pair <int, int>, vector <pair <int, int> >, greater <pair <int, int> > > H;
#define nmax 50010
int n,m,i,d[nmax];
vector <int> v[nmax],cost[nmax];

int main()
{
    fscanf(fin,"%d%d",&n,&m);
    for (i=1; i<=m; i++)
    {
        int a,b,c;
        fscanf(fin,"%d%d%d",&a,&b,&c);
        v[a].push_back(b);
        cost[a].push_back(c);
    }
    memset(d,inf,sizeof(d));
    d[1]=0;
    H.push(make_pair(d[1],1));
    while (!H.empty())
    {
        int x=H.top().second;
        H.pop();
        for (i=0; i<v[x].size(); i++)
        {
            int vecin=v[x][i];
            if (d[x]+cost[x][i]<d[vecin])
            {
                d[vecin]=d[x]+cost[x][i];
                H.push(make_pair(d[vecin],vecin));
            }
        }
    }
    for (i=2; i<=n; i++)
        if (d[i]==inf)
        fprintf(fout,"0 ");
    else
        fprintf(fout,"%d ",d[i]);
}