Cod sursa(job #1997678)

Utilizator dadadadadada da dadadada Data 5 iulie 2017 00:06:49
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

typedef pair<int,int> ii;

const int inf=1e9;
const int nmax=50005;

struct el
{
    int to,cost;
};

vector<el>g[nmax];
int n,m,dist[nmax];

priority_queue<ii , vector<ii> , greater<ii> > heap;
int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    int i,x;
    el temp;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        dist[i]=inf;
    for(i=1;i<=m;++i)
    {
        scanf("%d%d%d",&x,&temp.to,&temp.cost);
        g[x].push_back(temp);
    }

    int node,cost;
    dist[1]=0;
    heap.push(ii(0,1));
    int sz,currnode,currcost;
    while(!heap.empty())
    {
        printf ("*");
        cost=heap.top().first;
        node=heap.top().second;
        heap.pop();
        if(cost>dist[node])
            continue;
        sz=g[node].size();
        for(i=0;i<sz;++i)
        {
            currnode=g[node][i].to;
            currcost=g[node][i].cost;
            if(dist[node]+currcost<dist[currnode])
            {
                dist[currnode]=dist[node]+currcost;
                heap.push(ii(dist[currnode],currnode));
            }
        }
    }
    for(i=2;i<=n;i++)
    {
        if(dist[i]==inf)
            printf("0 ");
        else
            printf("%d ",dist[i]);
    }
}