Cod sursa(job #1747517)

Utilizator caprariuapCaprariu Alin-Paul caprariuap Data 25 august 2016 00:44:16
Problema Algoritmul lui Dijkstra Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <cstdio>
#include <set>
#include <vector>

using namespace std;

int n,m,i,j;
int costminim[50010];

vector <int> v[50010],cost[50010];

class comp
{
public:
    bool operator() (int a, int b)
    {
        if (costminim[a]==costminim[b])
            return a<b;
        return costminim[a]<costminim[b];
    }
};

set <int,comp> s;

int main()
{
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (i=1; i<=m; i++)
    {
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        v[a].push_back(b);
        cost[a].push_back(c);
    }
    for (i=2; i<=n; i++)
        costminim[i]=50000001;
    s.insert(1);
    while (!s.empty())
    {
        int x=*s.begin();
        s.erase(x);
        for (i=0; i<v[x].size(); i++)
            if (costminim[x]+cost[x][i]<costminim[v[x][i]])
            {
                costminim[v[x][i]]=costminim[x]+cost[x][i];
                s.insert(v[x][i]);
            }
    }
    for (i=2; i<=n; i++)
        if (costminim[i]!=50000001)
            printf("%d ",costminim[i]);
        else printf("0 ");
    printf("\n");
    return 0;
}