Pagini recente » Cod sursa (job #201002) | Cod sursa (job #403963) | Cod sursa (job #115340) | Cod sursa (job #1462261) | Cod sursa (job #381884)
Cod sursa(job #381884)
#include <stdio.h>
#include <vector>
#include <queue>
#define size 50100;
#define max 2000000000;
using namespace std;
struct adat{
long x,t;
};
long i,j,n,m,u,p;
adat a;
vector< adat > v[size];
vector< long > dist;
struct comp{
bool operator()(long x, long y) { return dist[x]>dist[y]; }
};
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
scanf("%ld %ld",&n,&m);
for(i=1;i<=n;++i){
for(j=1;j<=m;++j){
scanf("%ld %ld %ld",&p,&a.x,&a.t);
v[p].push_back(a);
}
scanf("\n");
}
priority_queue<long, vector<long>, comp> heap;
for(i=1;i<=n;++i) dist[i]=max;
heap.push(1);
dist[1]=0;
while(!heap.empty()){
u=heap.top();
heap.pop();
for(i=0;i<=v[u].size();++i){
if(dist[v[u][i].x]>dist[u]+v[u][i].t){
dist[v[u][i].x]=dist[u]+v[u][i].t;
heap.push(v[u][i].x);
}
}
}
for(i=2;i<=n;++i){
if(dist[i]==max) printf("%c ","0") else
printf("%ld ",dist[i]);
}
return 0;
}