Pagini recente » Cod sursa (job #176772) | Cod sursa (job #64444) | Cod sursa (job #3330183) | Cod sursa (job #3320728) | Cod sursa (job #3330708)
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream fout("dijkstra.out");
typedef priority_queue<pair<int,int>,vector<pair<int,int>>, greater<pair<int,int>>> MinHeap;
struct name
{
int nNodes;
vector<vector<pair<int,int>>> adj;
void init (int n){
nNodes=n;
adj.assign(n+1,vector<pair<int,int>>());
}
};
vector<int> dijkstra(name &g,int sak)
{
MinHeap minheap;
vector<int> dist(g.nNodes+1,INT_MAX);
vector<int> prev(g.nNodes+1,-1);
vector<bool> visited(g.nNodes+1,false);
dist[sak]=0;
minheap.push({0,sak});
while(!minheap.empty())
{
auto[curdist,curnode]=minheap.top();
minheap.pop();
if(visited[curnode])continue;
visited[curnode]=true;
for(auto &[nextnode,nextweight]:g.adj[curnode])
{
int nextdist=curdist+nextweight;
if(!visited[nextnode] && nextdist<dist[nextnode])
{
dist[nextnode]=nextdist;
prev[nextnode]=curnode;
minheap.push({nextdist,nextnode});
}
}
}
return dist;
}
int main()
{
int n, p,u,v,w,m;
f>>n>>m;
name g;
g.init(n);
for(int i=1; i<=m; i++)
{
f>>u>>v>>w;
g.adj[u].push_back({v,w});
}
int sak= 1;
auto dist = dijkstra(g,sak);
for(int i=2; i<=n; i++)
if(dist[i]==INT_MAX) fout<<0<<" ";
else fout<<dist[i]<<" ";
}