Cod sursa(job #1204968)

Utilizator gabib97Gabriel Boroghina gabib97 Data 4 iulie 2014 15:40:17
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <stdio.h>
#include <vector>
#include <queue>
#define pp pair<int,int>
#define inf 100000000
using namespace std;
int n,m,x,y,c,s,i,d[50005];
vector< pp > G[50005];
class Prioritize
{
public:
    int operator() ( const pair<int, int>& p1, const pair<int, int>& p2 )
    {
        return p1.second < p2.second;
    }
};
priority_queue<pp, vector<pp> , Prioritize > Q;
int main()
{
    freopen ("dijkstra.in","r",stdin);
    freopen ("dijkstra.out","w",stdout);
    scanf("%i%i",&n,&m);
    s=1;
    for(i=1;i<=m;i++)
    {
        scanf("%i%i%i",&x,&y,&c);
        G[x].push_back(pp(y,c));
    }
    for (i=1;i<=n;i++) d[i]=inf;
    d[s] = 0;
    Q.push(pp(s,d[s]));
    while(!Q.empty())
    {
        x = Q.top().first;
        Q.pop();
        int size = G[x].size();
        for(int i = 0 ; i < size ; i++)
        {
            y = G[x][i].first;
            c = G[x][i].second;
            //cout<<u<<" "<<v<<" "<<w<<endl;
            if(d[y] > d[x] + c)
            {
                d[y] = d[x] + c;
                Q.push(pp(y,d[y]));
            }
        }
    }
    for(i=2; i<=n; i++) printf("%i ",d[i]);
    return 0;
}