Cod sursa(job #1095373)

Utilizator paul_danutDandelion paul_danut Data 30 ianuarie 2014 20:10:53
Problema Algoritmul lui Dijkstra Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

struct muchie{int y,c;}el;

vector<muchie> a[50001];
vector<muchie>::iterator it;


#define INF 99999
int x,n,m,i,D[50001];

struct cmp{
   bool operator()(int x,int y) const
    {
        if(D[x]<D[y])
           return 1;
        else
           return 0;
    }
};

priority_queue<int,vector<int>,cmp> heap;

int main()
{
    f>>n>>m;
    for(i=1;i<=m;i++)
        {f>>x>>el.y>>el.c;
        a[x].push_back(el);}
    for(i=1;i<=n;i++)
        D[i]=INF;
    for(it=a[1].begin();it!=a[1].end();++it)
        {D[it->y]=it->c;
        heap.push(it->y);}
    while(!heap.empty())
    {
        x=heap.top();heap.pop();
        for(it=a[x].begin();it!=a[x].end();++it)
            if(D[x]+it->c<D[it->y])
                {
                D[it->y]=D[x]+it->c;
                heap.push(it->y);
                }
    }
    for(i=2;i<=n;i++)
        if(D[i]==INF)
          g<<0<<' ';
        else
          g<<D[i]<<' ';
    f.close();g.close();
}