Cod sursa(job #880702)

Utilizator MKLOLDragos Ristache MKLOL Data 17 februarie 2013 09:38:48
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include<algorithm>
#include<vector>
#include<queue>
#include<fstream>

#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()
{
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

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

return 0;
}