Pagini recente » Cod sursa (job #113490) | Cod sursa (job #2274129) | Cod sursa (job #1682468) | Cod sursa (job #3128056) | Cod sursa (job #664047)
Cod sursa(job #664047)
#include <cstdio>
#include <iostream>
#include <vector>
#include <bitset>
#include <queue>
#include <cstring>
using namespace std;
#define MAXN 50050
#define INF 0x3f3f3f3f
FILE* fin = fopen ("dijkstra.in", "rb");
FILE* fout = fopen ("dijkstra.out", "w");
const int bufSize = 8192;
char buf[bufSize];
int ptr = bufSize - 1;
inline int getInt ()
{
while (buf[ptr] < '0' || '9' < buf[ptr])
{
if (++ptr >= bufSize)
{
fread (buf, bufSize, 1, fin), ptr = 0;
}
}
int nr = 0;
while ('0' <= buf[ptr] && buf[ptr] <= '9')
{
nr = nr * 10 + buf[ptr] - '0';
if (++ptr >= bufSize)
{
fread (buf, bufSize, 1, fin), ptr = 0;
}
}
return nr;
}
typedef vector<pair<int,int> >::iterator iter;
int n, m, d[MAXN];
vector<pair<int,int> > g[MAXN];
priority_queue<pair<int, int> > s;
bitset<MAXN> viz;
void dijkstra()
{
memset(d, 0x3f, sizeof(d));
d[1] = 0;
s.push(make_pair(0, 1));
while (!s.empty()) {
int top = s.top().second;
viz[top] = true;
s.pop();
for(iter it=g[top].begin(); it!=g[top].end(); it++)
{
if(!viz[it->first] && (d[it->first] > d[top] + it->second))
{
d[it->first] = d[top] + it->second;
s.push(make_pair(-d[it->first], it->first));
}
}
}
}
int main()
{
FILE* fin=fopen("dijkstra.in","r");
FILE* fout=fopen("dijkstra.out","w");
n = getInt(), m = getInt();
for(int i = 0; i < m; i++)
{
int x = getInt(), y = getInt(), c = getInt();
g[x].push_back(make_pair(y, c));
}
dijkstra();
for(int i = 2; i <= n; i++)
{
fprintf(fout, "%d ",(d[i] == INF) ? 0 : d[i]);
}
fclose(fin);
fclose(fout);
return 0;
}