Pagini recente » Cod sursa (job #1603713) | Cod sursa (job #2743319) | Cod sursa (job #1388274) | Cod sursa (job #336484) | Cod sursa (job #2714461)
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
#define INF 10000000000
typedef pair <long, int> p;
int n,m,start;
long dist[50005];
bool viz[50005];
priority_queue <p, vector<p>, greater<p> > Q;
vector <p> G[50005];
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,cost;
Q.push(make_pair(0,start));
while(!Q.empty())
{
vert=Q.top().second;
if(viz[vert]==0)
{
viz[vert]=1;
Q.pop();
for(auto x:G[vert])
{
if(dist[vert]+x.first<dist[x.second])
{
Q.push({dist[vert]+x.first,x.second});
dist[x.second]=dist[vert]+x.first;
}
}
} else 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<<" ";
}