Cod sursa(job #752254)

Utilizator SchumiDumitru Andrei Georgian Schumi Data 28 mai 2012 10:49:04
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#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);
    ifstream f ("dijkstra.in");
    ofstream g ("dijkstra.out");
    f >> n >> m;
    memset(best, 0x3f, sizeof(best));
    best[1] = 0;
    for(i = 1; i <= m; ++i) {
        f >> 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)
            g << "0 ";
        else
            g << best[i] << ' ';

    return 0;
}