Pagini recente » Cod sursa (job #2859838) | Cod sursa (job #2600578) | Cod sursa (job #1651576) | Cod sursa (job #3190291) | Cod sursa (job #582890)
Cod sursa(job #582890)
#include <cstdio>
#include <vector>
#include <queue>
#include <string.h>
#define INF 0x3f3f3f3f
using namespace std;
int n,m;
struct GRAF{int nod,cost;GRAF *next;};
typedef GRAF *Graf;
Graf G[50003];
int c[50003];
struct cmp{bool operator()(int x,int y){return c[x]>c[y];}};
priority_queue<int,vector<int>,cmp> h;
void add(int x,int y,int C)
{
Graf inter;
inter=new GRAF;
inter->nod=y;
inter->cost=C;
inter->next=G[x];
G[x]=inter;
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
int x,y,C,i,node;
scanf("%d %d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d %d %d",&x,&y,&C);
add(x,y,C);
}
memset(c,INF,sizeof(c));
c[1]=0;
h.push(1);
while(!h.empty())
{
node=h.top();
for(Graf it=G[node];it!=NULL;it=it->next)
if(c[node]+it->cost<c[it->nod])
{
c[it->nod]=c[node]+it->cost;
h.push(it->nod);
}
h.pop();
}
for(i=2;i<=n;++i)if(c[i]!=INF)printf("%d ",c[i]); else printf("0 ");
printf("\n");
return 0;
}