Cod sursa(job #616726)

Utilizator the@EyE@Postavaru Stefan the@EyE@ Data 13 octombrie 2011 10:47:15
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<stdio.h>
#include<vector>
#include<set>
#define INF 50001
#define nod pair<int,int>

using namespace std;
//using namespace __gnu_cxx;

int n,m;
vector<int> graph[INF],cost[INF];
int dist[INF];
set<nod> uber;

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for(int i=0;i<m;i++)
    {
        int s,d,c;
        scanf("%d %d %d\n",&s,&d,&c);
        graph[s].push_back(d);
        cost[s].push_back(c);
    }

    for(int i=2;i<=n;i++)dist[i]=INF;
    nod p = make_pair(0,1);
    uber.insert(p);

    while(uber.size()>0)
    {
        int c=(*uber.begin()).first;
        int s=(*uber.begin()).second;
        uber.erase(uber.begin());
        for(int i=0;i<graph[s].size();i++)
            if(dist[graph[s][i]]>cost[s][i]+c)
            {
               dist[graph[s][i]]= cost[s][i]+c;
               uber.insert(make_pair(dist[graph[s][i]],graph[s][i]));
            }
    }

    for(int i=2;i<=n;i++)printf("%d ",dist[i]);
    printf("/n");
}