Cod sursa(job #752249)

Utilizator SchumiDumitru Andrei Georgian Schumi Data 28 mai 2012 10:45:47
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;


const int maxn = 50005;
struct muchie {
    int nod;
    int cost;
};

vector <muchie> vecini[maxn];
queue <int> coada;
int n, m, x, y, z, best[maxn], nc;
bool pus[maxn];


int main()
{
    int i;
    freopen ("dijkstra.in", "r", stdin);
    freopen ("dijkstra.out", "w", stdout);
    scanf("%d %d", &n, &m);
    memset(best, 0x3f, sizeof(best));
    best[1] = 0;
    for(i = 1; i <= m; ++i) {
        scanf("%d %d %d", &x, &y, &z);
        vecini[x].push_back(muchie {y, z});
        //vecini[y].push_back(muchie {x, z});
    }
    coada.push(1);
    pus[1] = 1;
    while(!coada.empty()) {
        nc = coada.front();
        coada.pop();
        pus[nc] = 0;
        for(i = 0; i < vecini[nc].size(); ++i) {
            if(best[vecini[nc][i].nod] > best[nc] + vecini[nc][i].cost) {
                if(!pus[vecini[nc][i].nod]) {
                    coada.push(vecini[nc][i].nod);
                    pus[vecini[nc][i].nod] = 1;
                }
                best[vecini[nc][i].nod] = best[nc] + vecini[nc][i].cost;
            }
        }
    }
    for(i = 2; i <= n; ++i)
        if(best[i] == 0x3f3f3f3f)
            printf("0 ");
        else
            printf("%d ", best[i]);

    return 0;
}