Cod sursa(job #880687)

Utilizator MKLOLDragos Ristache MKLOL Data 17 februarie 2013 09:20:40
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<algorithm>
#include<vector>
#include<queue>
#include<stdio.h>

#define pb push_back
#define mp make_pair
#define fs first
#define sc second

using namespace std;

priority_queue<pair<int,int> > S;

int N,M;
pair<int,int> act,nod;
vector<pair<int,int> > g[50500];
int cost[50500];
int x,y,c;
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","r",stdin);

scanf("%d%d",&N,&M);
    for(int i=2;i<=N;++i)
        cost[i]=10101000;
    for(int i=1;i<=M;++i)
    {
        scanf("%d%d%d",&x,&y,&c);
        g[x].pb(mp(y,c));
    }
    S.push(mp(1,0));
    while(S.size() != 0)
    {
        act = S.top();
        S.pop();
        if(cost[act.fs]==act.sc)
        {
            for(int i=0;i<g[act.fs].size();++i)
            {
                if(cost[g[act.fs][i].fs] > cost[act.fs] + g[act.fs][i].sc)
                    {
                    S.push(mp(g[act.fs][i].fs,cost[act.fs] + g[act.fs][i].sc));
                    cost[g[act.fs][i].fs]= cost[act.fs] + g[act.fs][i].sc;
                    }
            }
        }
    }
for(int i=2;i<=N;++i)
    printf("%d ",cost[i]);

return 0;
}