Cod sursa(job #1537377)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 27 noiembrie 2015 10:22:42
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <vector>
#include <queue>
#include <deque>
#include <limits>
#include <utility>
using namespace std;

typedef pair<int, int> PII;

const int INF = numeric_limits<int>::max()>>1;


int main()
{
    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");

    int n,m;
    fin>>n>>m;

    vector<deque<PII>> Adj(n+1);
    for(int i=0;i<m;++i){
        int a,b,d;
        fin>>a>>b>>d;
        Adj[a].push_back(PII(b,d));
    }

    vector<int> dist(n+1,INF);
    dist[1]=0;
    priority_queue<PII,deque<PII>,greater<PII>> q;
    q.push(PII(0,1));

    while(!q.empty()){
        int v=q.top().second;
        int d=q.top().first;
        q.pop();

        if(d==dist[v])
            for(auto it=Adj[v].begin();it!=Adj[v].end();++it)
                if(dist[it->first]>d+it->second){
                    dist[it->first]=d+it->second;
                    q.push(PII(dist[it->first],it->first));
                }

    }


    for(int i=2;i<=n;++i)
        if(dist[i]==INF) fout<<"0 ";
        else fout<<dist[i]<<' ';
    fout<<'\n';
}