Pagini recente » Cod sursa (job #1144654) | Cod sursa (job #3193913) | Cod sursa (job #812726) | Cod sursa (job #781031) | Cod sursa (job #502018)
Cod sursa(job #502018)
// infoarena: problema/dijkstra //
#include <cstdio>
#include <vector>
#include <queue>
#define MAXN 50010
#define INF (1<<30)
using namespace std;
FILE *in=fopen("dijkstra.in","r"), *out=fopen("dijkstra.out","w");
int n,m,i,j,d[MAXN],_;
struct MUCHIE
{
int b,e,l;
};
struct cmp
{
inline bool operator() (MUCHIE a, MUCHIE b)
{
return d[a.b] + a.l > d[b.b] + b.l;
}
};
vector<MUCHIE> g[MAXN];
vector<MUCHIE>::iterator it,e;
priority_queue<MUCHIE, vector<MUCHIE>, cmp> q;
MUCHIE tmp,M;
int main()
{
fscanf(in, "%d %d", &n, &m);
for(i=1; i<=m; i++)
{
fscanf(in, "%d %d %d", &tmp.b, &tmp.e, &tmp.l);
g[tmp.b].push_back(tmp);
}
for(it=g[1].begin(); it!=g[1].end(); it++)
q.push(*it);
for(i=2; i<=n; i++)
d[i] = INF;
for(_=1; _<n; _++)
{
M.e = 0;
while(!q.empty() && d[M.e] != INF)
M = q.top(), q.pop();
if(d[M.e] != INF)
break;
d[M.e] = d[M.b] + M.l;
for(i=0, j=g[M.e].size(); i<j; i++)
if(d[g[M.e][i].e] == INF)
q.push(g[M.e][i]);
}
for(i=2; i<=n; i++)
fprintf(out, "%d ", (d[i]==INF ? 0 : d[i]));
return 0;
}