Pagini recente » Termeni si conditii de utilizare a site-ului infoarena | Concursuri organizate de infoarena | Cod sursa (job #2671645) | Cod sursa (job #3241646) | Cod sursa (job #2704440)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
const int NMAX=50001;
int n,m,dist[NMAX];
struct edge
{
int node, dist;
bool operator <(const edge &aux)const
{
return dist>aux.dist;
}
};
vector<edge> g[NMAX];
priority_queue<edge>pq;
int main()
{
in>>n>>m;
for(int i=1, a, b, l; i<=n; i++)
{
in>>a>>b>>l;
g[a].push_back({b,l});
g[b].push_back({a,l});
}
memset( dist, -1, sizeof(dist));
pq.push({1,0});
while(!pq.empty())
{
int node=pq.top().node, l=pq.top().dist;
pq.pop();
if(dist[node] != -1)
{
continue;
}
dist[node]=l;
for(auto y:g[node])
if(dist[node] != -1)
pq.push({y.node,l+y.dist});
}
for(int i=2;i<=n;i++)
out<<dist[i]<<" ";
return 0;
}