Pagini recente » Cod sursa (job #2857952) | Cod sursa (job #617124) | Cod sursa (job #2734752) | Cod sursa (job #1068265) | Cod sursa (job #2669454)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
typedef pair < int, int > PII;
const int NMAX = 5e4 + 1;
const int INF = 1e9;
int N, M;
vector < PII > G[NMAX];
int d[NMAX];
bool Sel[NMAX];
static inline void Read ()
{
f.tie(nullptr);
f >> N >> M;
for(int i = 1; i <= M; ++i)
{
int X = 0, Y = 0, C = 0;
f >> X >> Y >> C;
G[X].push_back({C, Y});
}
return;
}
static inline void Initialize ()
{
for(int i = 1; i <= N; ++i)
d[i] = INF, Sel[i] = 0;
return;
}
static inline void Load (int Node)
{
for(auto it : G[Node])
d[it.second] = it.first;
return;
}
static inline void Dijkstra (int Chosen)
{
Initialize();
d[Chosen] = 0, Sel[Chosen] = 1;
Load(Chosen);
int free = (N - 1);
while(free)
{
int Node = 0, Min = INF;
for(int i = 1; i <= N; ++i)
if(!Sel[i] && d[i] < Min)
Min = d[i], Node = i;
Sel[Node] = 1, --free;
for(auto it : G[Node])
{
int new_cost = d[Node] + it.first;
int adj = it.second;
if(new_cost < d[adj])
d[adj] = new_cost;
}
}
return;
}
static inline void Write ()
{
for(int i = 2; i <= N; ++i)
{
g << ((d[i] != INF) ? d[i] : 0);
if(i != N)
g << ' ';
}
g << '\n';
return;
}
int main()
{
Read();
Dijkstra(1);
Write();
return 0;
}