Cod sursa(job #2225588)

Utilizator AlexandruPaulSirbu Alex AlexandruPaul Data 27 iulie 2018 17:16:48
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
const int Maxx=5e4+1;
const int INF=8e6+3;
struct NODE {
    int node,cost;
}ac,nw;
bool operator < (const NODE &a,const NODE &b) {
    return a.cost>b.cost;
}
priority_queue <NODE> Q;
vector <NODE> A[Maxx];
vector <NODE>::iterator it;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m;
int x,y,cost;
int ans[Maxx];
void bfs();
int main() {
    fin>>n>>m;++m;
    for (;--m;){
        fin>>x>>y>>cost;
        A[x].push_back({y,cost});
    }
    for (int i=1;i<=n;++i) ans[i]=INF;
    bfs();
    for (int i=2;i<=n;++i) fout<<((ans[i]==INF) ? (0) :(ans[i]))<<" ";
    return 0;
}
void bfs(){
    ac.node=1;
    ac.cost=0;
    Q.push(ac);
    ans[1]=0;
    while (!Q.empty()){
        ac=Q.top();
        Q.pop();
        for (int i=0;i<A[ac.node].size();++i){
            if (ans[A[ac.node][i].node]==-1 || ans[A[ac.node][i].node]>ac.cost+A[ac.node][i].cost){
                ans[A[ac.node][i].node]=ac.cost+A[ac.node][i].cost;
                nw.node=A[ac.node][i].node;
                nw.cost=ans[A[ac.node][i].node];
                Q.push(nw);
            }
        }
    }
}