Cod sursa(job #1194512)

Utilizator xtreme77Patrick Sava xtreme77 Data 3 iunie 2014 23:37:23
Problema Algoritmul lui Dijkstra Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <cstdio>
#include <vector>
#include <set>
#define pb push_back
#define mp make_pair
#define f first
#define s second
const int MAX = 50100;
const int INF = 1<<30;
using namespace std;
int d[MAX];
typedef pair<int,int> P;
vector <int> gr[MAX];
vector <short int> cost[MAX];
set <P> graph;
void dijkstra(){
    graph.insert(mp(1,0));
    while(graph.size()>0){
        int val=(*graph.begin()).s;
        int x=(*graph.begin()).f;
        graph.erase(*graph.begin());
        for(int i=0;i<(int)gr[x].size();++i)
            if(d[gr[x][i]]>val+cost[x][i]){
                d[gr[x][i]]=val+cost[x][i];
                graph.insert(mp(gr[x][i],d[gr[x][i]]));
            }
    }
}
int main()
{
    int n,m;
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(int i=2;i<=n;++i)d[i]=INF;
    for(int i=1;i<=m;++i){
        int x,y,val;
        scanf("%d%d%d",&x,&y,&val);
        gr[x].pb(y);
        cost[x].pb(val);
    }
    dijkstra();
    for(int i=2;i<=n;++i)printf("%d ",d[i]==INF?0:d[i]);
    printf("\n");

    return 0;
}