Pagini recente » Cod sursa (job #187891) | Istoria paginii runda/simulare_ongm/clasament | Monitorul de evaluare | Istoria paginii utilizator/angeleyesbyspectre | Cod sursa (job #2347029)
#include <bits/stdc++.h>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n, m, mindist[50005];
vector<pair<int, int> >adj[50005];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > >pq;
void dijkstra(int nod)
{
pq.push(make_pair(1, 0));
while(!pq.empty())
{
pair<int, int> p = pq.top();
pq.pop();
if(mindist[p.first] != p.second)
continue;
for(auto i : adj[p.first])
{
if(mindist[i.first] > p.second + i.second)
{
mindist[i.first] = p.second + i.second;
pq.push({i.first, mindist[i.first]});
}
}
}
}
int main()
{
f>>n>>m;
int x, y, cost;
for(int i = 1; i <= m; i++)
{
f>>x>>y>>cost;
adj[x].push_back({y, cost});
}
for(int i = 1; i <= n; i++)
mindist[i] = 0x3f3f3f3f;
mindist[1] = 0;
dijkstra(1);
for(int i = 2; i <= n; i++)
if(mindist[i] != 0x3f3f3f3f)
g<<mindist[i]<<" ";
else g<<0<<" ";
return 0;
}