Pagini recente » Cod sursa (job #676280) | Cod sursa (job #3310015) | Cod sursa (job #1542485) | Cod sursa (job #2084971) | Cod sursa (job #496432)
Cod sursa(job #496432)
#include <fstream>
#include <set>
#include <vector>
#include <limits>
using namespace std;
#define NMax 50001
int N, M;
vector< pair<int, int> > W[NMax];
vector<int> D;
set< pair<int, int> > H;
void read()
{
int u, v, c;
ifstream fin;
fin.open("dijkstra.in", fstream::in);
fin >> N >> M;
while (M--)
{
fin >> u >> v >> c;
W[u].push_back(pair<int, int>(v, c));
}
fin.close();
}
void solve()
{
int u, v, c;
for (int i = 0; i <= N; ++i)
D.push_back(INT_MAX);
D[1] = 0;
H.insert(pair<int, int>(0, 1));
while(!H.empty())
{
u = H.begin()->second;
H.erase(*H.begin());
for (vector< pair<int, int> >::iterator i = W[u].begin(); i != W[u].end(); ++i)
{
v = i->first;
c = i->second;
if (D[v] > D[u] + c)
{
D[v] = D[u] + c;
H.insert(pair<int, int>(D[v], v));
}
}
}
}
void write()
{
ofstream fout("dijkstra.out");
for (int i = 2; i <= N; ++i)
fout << (D[i] == INT_MAX? 0: D[i]) << ' ';
fout << '\n';
fout.close();
}
int main()
{
read();
solve();
write();
return 0;
}