Cod sursa(job #1722607)

Utilizator cubaLuceafarul cuba Data 28 iunie 2016 15:29:59
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,c,x,y;
const int NMAX=50003;
const int INF=1e9;
struct Pct{
    int cost,nod;
};
struct cmp{
    inline bool operator ()(const Pct A,const Pct B)
    {
        return A.cost>B.cost;
    }
};
priority_queue < Pct,vector <Pct> , cmp > Q;
vector <int> G[NMAX],C[NMAX];
int dp[NMAX];
inline void Dijkstra()
{
    int nod;
    Pct a,b;
    a.cost=0,a.nod=1;
    Q.push(a);
    while(!Q.empty())
    {
        a=Q.top();
        nod=a.nod;
        Q.pop();
        for(int i=0;i<G[nod].size();i++)
        {
            int cost=dp[nod]+C[nod][i];
            if(dp[G[nod][i]]>cost)
            {
                dp[G[nod][i]]=cost;
                b.nod=G[nod][i];
                b.cost=cost;
                Q.push(b);
            }
        }
    }
}
int main()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        G[x].push_back(y);
        C[x].push_back(c);
    }
    for(int i=2;i<=n;i++)
        dp[i]=INF;
    Dijkstra();
    for(int i=2;i<=n;i++)
        if(dp[i])
            g<<dp[i]<<" ";
        else
            g<<"0 ";
    g<<"\n";
    return 0;
}