Pagini recente » Cod sursa (job #2169164) | Cod sursa (job #720914) | Cod sursa (job #87964) | Cod sursa (job #2841745) | Cod sursa (job #2714405)
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
#define INF 2000000000
typedef pair <int, int> p;
int n,m,dist[50001],start;
bool viz[50001];
priority_queue <p, vector<p>, greater<p> > Q;
vector <p> G[50001];
void read()
{int a,b,c,i;
f>>n>>start;
while(f>>a>>b>>c)
G[a].push_back({c,b});
}
void init()
{
for(int i=1;i<=n;i++)
dist[i]=INF;
dist[start]=0;
}
void Dijkstra()
{
int vert;
Q.push(make_pair(0,start));
while(!Q.empty())
{
vert=Q.top().second;
if(!viz[vert]){
for(auto x: G[vert])
{
if(dist[x.second]>dist[vert]+x.first)
{
dist[x.second]=dist[vert]+x.first;
Q.push({x.first,x.second});
}
}}
viz[vert]=1;
Q.pop();
}
}
int main()
{
read();
start=1;
init();
Dijkstra();
int i;
for(i=2;i<=n;i++)
if(dist[i]!=INF) g<<dist[i]<<" ";
else g<<0<<" ";
}