Pagini recente » Cod sursa (job #303655) | Cod sursa (job #1639384) | Cod sursa (job #2073512) | Cod sursa (job #1870047) | Cod sursa (job #2225588)
#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);
}
}
}
}