Pagini recente » Cod sursa (job #2799524) | Cod sursa (job #1022598) | Cod sursa (job #1326759) | Cod sursa (job #1838642) | Cod sursa (job #407519)
Cod sursa(job #407519)
#include <stdio.h>
#include <queue>
#define size 50010
using namespace std;
struct nod
{
int inf,c;
nod *next;
}*a[size];
int n,m,dist[size],viz[size];
struct cmp
{
bool operator()(const int &a,const int &b)const
{
return dist[a]<dist[b];
}
};
priority_queue <short,vector <short>,cmp> Q;
void add(nod *&a,int i,int dist)
{
nod *q=new nod;
q->inf=i;
q->c=dist;
q->next=a;
a=q;
}
void citire()
{
int A,B,C;
scanf ("%d %d",&n,&m);
for (int i=0;i<m;i++)
{
scanf ("%d %d %d",&A,&B,&C);
add(a[A],B,C);
add(a[B],A,C);
}
}
void solve()
{
int n;
memset(dist,0x3f3f,sizeof(dist));
Q.push(1);
dist[1]=0;
while (!Q.empty())
{
n=Q.top();
Q.pop();
viz[n]=0;
for (nod *i=a[n] ; i ;i=i->next)
if (dist[i->inf] > i->c + dist[n])
{
dist[i->inf] = i->c + dist[n];
if (!viz[i->inf])
{
viz[i->inf]=1;
Q.push(i->inf);
}
}
}
}
void afish()
{
for (int i=2;i<=n;i++)
printf("%d ",dist[i]);
printf("\n");
}
int main ()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
citire();
solve();
afish();
return 0;
}