Cod sursa(job #900003)

Utilizator the@EyE@Postavaru Stefan the@EyE@ Data 28 februarie 2013 17:17:07
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

struct edge
{
    int nod,c;
};

struct elem
{
    int nod,c;
};

struct cmp
{
    bool operator()(const elem &e1,const elem &e2)
    {
        return e1.c>e2.c;
    }
};

priority_queue<elem, vector<elem> , cmp> Q;
vector<edge> graph[50001];
int cost[50001],n,m;

void expand()
{
    elem el=Q.top();
    if(cost[el.nod]>el.c||cost[e1.nod]==0)
    {
        cost[el.nod]=el.c;
        for(int i=0;i<graph[el.nod].size();++i)
        {
            edge e=graph[el.nod][i];
            elem e2;e2.nod=e.nod;e2.c=el.c+e.c;
            Q.push(e2);
        }
    }
    Q.pop();
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    //for(int i=1;i<=n;++i)cost[i]=999999999;
    for(int i=0;i<m;++i)
    {
        int x,y,c;
        scanf("%d%d%d",&x,&y,&c);
        edge e;e.c=c;e.nod=y;
        graph[x].push_back(e);
    }

    elem e;e.nod=1;e.c=0;
    Q.push(e);
    while(Q.size()>0)expand();
    for(int i=2;i<=n;++i)printf("%d ",cost[i]);
    return 0;
}