Cod sursa(job #555144)

Utilizator SadmannCornigeanu Calin Sadmann Data 15 martie 2011 12:10:49
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<fstream>
#include<vector>
#include<algorithm>
#define nMAX 50000
#define cost first
#define poz second
#define INF 1<<30
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int N,M;
vector<int> dist(nMAX,INF);
vector< pair<int,int> > graf[nMAX];
vector< pair<int,int> > H;

int main()
{
    in>>N>>M;
    for(int i=1;i<=M;i++)
    {
        int x,y,c;
        in>>x>>y>>c;
        graf[x].push_back(make_pair(c,y));
    }
    in.close();
    dist[1]=0;
    H.push_back(make_pair(0,1));
    make_heap(H.begin(),H.end());
    while(!H.empty())
    {
        pair<int,int> x=H.front();
         pop_heap(H.begin(),H.end());
         H.pop_back();
         vector<pair<int,int> >::iterator vecin;
        for(vecin=graf[x.poz].begin();vecin!=graf[x.poz].end();vecin++)
        {
            if(dist[vecin->poz]>dist[x.poz]+vecin->cost)
            {
                dist[vecin->poz]=dist[x.poz]+vecin->cost;
                H.push_back(make_pair(dist[vecin->poz],vecin->poz));
                push_heap(H.begin(),H.end());
            }
        }
    }
    for(int i=2;i<=N;i++)
        out<<(dist[i]==INF ? 0:dist[i])<<" ";

    return 0;
}