Cod sursa(job #555189)

Utilizator SadmannCornigeanu Calin Sadmann Data 15 martie 2011 12:31:58
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include<fstream>
#include<vector>
#include<set>
#define nMAX 50001
#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];
set< 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.insert(make_pair(0,1));
    while(!H.empty())
    {
        pair<int,int> x=*H.begin();
        H.erase(H.begin());
        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.insert(H.begin(),make_pair(dist[vecin->poz],vecin->poz));
            }
        }
    }
    for(int i=2;i<=N;i++)
        out<<(dist[i]==INF ? 0:dist[i])<<" ";

    return 0;
}