Cod sursa(job #1922254)

Utilizator RaduToporanRadu Toporan RaduToporan Data 10 martie 2017 16:40:52
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <cstdio>
#include <vector>
#include <queue>

using namespace std;
const int inf=2000000000;
int n,m,i,x,y,c,d[50005];
struct element
{
    int y,cost;
} e1;
bool eq[50005];

vector <element> v[50005];
queue <int> q;

element make_elem(int y, int c)
{
    element e;
    e.y=y;
    e.cost=c;
    return e;
}

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1; i<=m; i++)
    {
        scanf("%d%d%d",&x,&y,&c);
        e1=make_elem(y,c);
        v[x].push_back(e1);
    }
    for (i=2; i<=n; i++)
        d[i]=inf;
    q.push(1);
    eq[1]=1;
    while (!q.empty())
    {
        x=q.front();
        q.pop();
        for (i=0; i<v[x].size(); i++)
        {
            y=v[x][i].y;
            if (d[y]>d[x]+v[x][i].cost)
            {
                d[y]=d[x]+v[x][i].cost;
                if (eq[y]==0)
                {
                    q.push(y);
                    eq[y]=1;
                }
            }
        }
    }
    for (i=2; i<=n; i++)
        if (d[i]==inf)
        printf("-1 ");
    else printf("%d ",d[i]);
    printf("\n");
    return 0;
}