Pagini recente » Cod sursa (job #992001) | Cod sursa (job #68285) | Cod sursa (job #1504534) | Borderou de evaluare (job #1036456) | Cod sursa (job #1925202)
#include <iostream>
#include <fstream>
#include <queue>
#define inf 0x3f3f3f3f
#define MaxN 50005
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct mstr{
int nxt,wgt;
};
vector<mstr>v1[MaxN];
int dist[MaxN];
bool vf[MaxN];
int n,m,a,b,wgt;
void solve(int curr){
priority_queue<pair<int,int> >pq;
for(int i=1;i<=n;i++)
dist[i] = inf;
dist[curr] = 0;
pq.push(make_pair(0,curr));
while(pq.size()){
curr = pq.top().second;
vf[curr] = 0;
pq.pop();
for(int i=0;i<v1[curr].size();i++)
if(dist[v1[curr][i].nxt] > dist[curr] + v1[curr][i].wgt){
dist[v1[curr][i].nxt] = dist[curr] + v1[curr][i].wgt;
pq.push(make_pair(-dist[v1[curr][i].wgt],v1[curr][i].nxt));
}
}
}
int main()
{
fin>>n>>m;
for(int i=0;i<m;i++){
fin>>a>>b>>wgt;
mstr aux;
aux.nxt = b;
aux.wgt = wgt;
v1[a].push_back(aux);
aux.nxt = a;
v1[b].push_back(aux);
}
solve(1);
for(int i=2;i<=n;i++)
if(dist[i]!=inf)
fout<<dist[i]<<' ';
return 0;
}