Cod sursa(job #1829089)

Utilizator cameleonGeorgescu Dan cameleon Data 14 decembrie 2016 12:50:26
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;

struct muchie {
    int nod,dist;
};

struct comp {
    bool operator()(muchie &a,muchie &b) {
        return a.dist>b.dist;
    }
};

priority_queue <muchie,vector<muchie>,comp> q;
vector <muchie> v[50005];
unsigned int dist[50005];
int n,m;


muchie mk_muchie(int nod,int dist) {
    muchie nou;
    nou.nod = nod;
    nou.dist = dist;
    return nou;
}

int main() {
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);
    scanf("%d %d",&n,&m);
    for (int i=2;i<=n;i++) dist[i] = 0xffffffff;

        for (int j=1;j<=m;j++) {
                int t,f,c;
                scanf("%d %d %d",&t,&f,&c);
                v[t].push_back(mk_muchie(f,c));
        }

    vector<muchie>::iterator it;

    q.push(mk_muchie(1,0));
    while (!q.empty()) {
        muchie n = q.top(); q.pop();

        for(it=v[n.nod].begin();it!=v[n.nod].end();++it){
                muchie nou = *it;
                unsigned int nod = nou.nod, dst = nou.dist;
                if (dist[nod] > n.dist + dst ) {
                    dist[nod] = n.dist + dst;
                    q.push(mk_muchie(nod,dist[nod]));
                }
        }
    }
    for (int i=2;i<=n;i++) {
        if (dist[i] != 0xffffffff) printf("%d ",dist[i]);
        else printf("0 ");
    }
    return 0;
}