Cod sursa(job #1037555)

Utilizator Stefanescu_MihaiStefanescu Mihai-Nicolae Stefanescu_Mihai Data 20 noiembrie 2013 13:03:29
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <vector>

using namespace std;

vector <int> arc[50100], arcost[50100];
int cost[50100], sis[50100];

void dijkstra(int nod)
{
    for (int i = 0; i < sis[nod]; ++i)
    {
        if (cost[arc[nod][i]] > cost[nod] + arcost[nod][i])
        {
            cost[arc[nod][i]] = cost[nod] + arcost[nod][i];
            dijkstra(arc[nod][i]);
        }
    }
}

int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);

    int n, m, i, a, b, c;

    scanf("%d %d\n", &n, &m);
    for (i = 1; i <= m; ++i)
    {
        scanf("%d %d %d", &a, &b, &c);
        arc[a].push_back(b);
        arcost[a].push_back(c);
        ++sis[a];
    }

    for (i = 2; i <= n; ++i)
    {
        cost[i] = 1<<30;
    }


    dijkstra(1);

    for (i = 2; i < n; ++i)
    {
       /* if (cost[i] == 1<<30)
            printf("0\n");
        else*/
            printf("%d ", cost[i]);
    }
    printf("%d\n", cost[n]);

    fclose(stdin);
    fclose(stdout);

    return 0;
}