Pagini recente » Cod sursa (job #247398) | Cod sursa (job #3129667) | Cod sursa (job #745607) | Cod sursa (job #710713) | Cod sursa (job #2682342)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
vector<pair<int, int>> v[50001]; /// first-cost second-vecin
int dist[50001], n;
bool viz[50001];
void dijkstra(int a)
{
for(int i=1; i<=n; i++)
{
dist[i]=1e9;
viz[i]=false;
}
priority_queue<pair<int, int>> distmin; /// first-cost second-nod
distmin.push({0, a});
dist[a]=0;
while(distmin.size() != 0)
{
pair<int, int> x=distmin.top ();
distmin.pop ();
if(viz[x.second] == false)
{
viz[x.second]=true;
for(int i=0; i<v[x.second].size(); i++)
{
if(viz[v[x.second][i].second] == false)
distmin.push({-1*(dist[x.second]+v[x.second][i].first), v[x.second][i].second});
if(dist[v[x.second][i].second] > dist[x.second]+v[x.second][i].first)
dist[v[x.second][i].second]=dist[x.second]+v[x.second][i].first;
}
}
}
}
int main()
{
int m;
cin>>n>>m;
for(int i=1; i<=m; i++)
{
int x, y, c;
cin>>x>>y>>c;
v[x].push_back({c, y});
}
dijkstra(1);
for(int j=2; j<=n; j++)
if(dist[j] < 1e9)
cout<<dist[j]<<" ";
else
cout<<"0 ";
return 0;
}