Cod sursa(job #880698)

Utilizator MKLOLDragos Ristache MKLOL Data 17 februarie 2013 09:32:54
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 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();
        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)
    if(cost[i]==10101000)
        fout<<"0 ";
    else
        fout<<cost[i]<<" ";

return 0;
}