Pagini recente » Cod sursa (job #2763643) | Cod sursa (job #1915013) | Cod sursa (job #1208695) | Cod sursa (job #2326754) | Cod sursa (job #2751167)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define NMAX 50005
using namespace std;
// INPUT / OUTPUT
string FILE_IN = "dijkstra.in";
string FILE_OUT = "dijkstra.out";
ifstream f(FILE_IN);
ofstream g(FILE_OUT);
// GLOBAL DECLARATIONS
int N, M, ans[NMAX];
bool visited[NMAX];
struct Node
{
int node, dist;
bool operator < (const Node &other)const
{
return dist > other.dist;
}
};
vector<Node> muchii[2 * NMAX];
priority_queue<Node> pq;
// FUNCTIONS
void ReadInput();
void Solution();
void Output();
//-------------------------------------
inline void ReadInput()
{
f >> N >> M;
for (int i = 0 ; i < M ; ++ i)
{
int A, B, C;
f >> A >> B >> C;
muchii[A].push_back({B, C});
}
}
//-------------------------------------
inline void Solution()
{
pq.push({1, 0});
while (!pq.empty())
{
int node = pq.top().node;
int dist = pq.top().dist;
pq.pop();
if (!visited[node])
{
visited[node] = true;
ans[node] = dist;
for (auto adj: muchii[node])
{
if (!visited[adj.node])
{
pq.push({adj.node, dist + adj.dist});
}
}
}
}
}
//-------------------------------------
inline void Output()
{
for (int i = 2 ; i <= N ; ++ i)
g << ans[i] << " ";
}
//-------------------------------------
int main(int argc, const char * argv[]) {
ReadInput();
Solution();
Output();
return 0;
}