Pagini recente » Cod sursa (job #444449) | Cod sursa (job #2912763) | Cod sursa (job #1566752) | Cod sursa (job #248734) | Cod sursa (job #593170)
Cod sursa(job #593170)
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
struct edge
{
int dest,cost;
};
struct cmp
{
bool operator()(edge i,edge j)
{
return i.cost>j.cost;
}
};
vector <edge> g[50001];
priority_queue <edge,vector <edge>,cmp> h;
int vis[50001],v[50001];
int main()
{
edge aux;
int a,b,c,i,n,m,x,y;
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%d %d\n",&n,&m);
for (i=1;i<=m;++i)
{
scanf("%d %d %d\n",&a,&b,&c);
aux.cost=c;
aux.dest=b;
g[a].push_back(aux);
aux.dest=a;
g[b].push_back(aux);
}
aux.dest=1;
aux.cost=0;
h.push(aux);
while (!h.empty())
{
x=h.top().dest;
y=h.top().cost;
v[x]=y;
vis[x]=1;
h.pop();
for (i=0;i<g[x].size();++i)
if (!vis[g[x][i].dest])
{
aux.dest=g[x][i].dest;
aux.cost=v[x]+g[x][i].cost;
h.push(aux);
}
while (!(h.empty())&&vis[h.top().dest])
h.pop();
}
for (i=2;i<=n;++i)
printf("%d ",v[i]);
printf("\n");
return 0;
}