Pagini recente » Cod sursa (job #3311449) | Cod sursa (job #1028155) | Cod sursa (job #818923) | Cod sursa (job #2116546) | Cod sursa (job #496416)
Cod sursa(job #496416)
//
#include <fstream>
#include <queue>
using namespace std;
#define NMax 50000
#define Inf 2000000000
int N, M;
int D[NMax], P[NMax], *G[NMax], *C[NMax];
queue<int> Q;
void read()
{
int u, v, c;
ifstream fin;
fin.open("dijkstra.in", fstream::in);
fin >> N >> M;
for (int k = 0; k < M; ++k)
{
fin >> u >> v >> c;
++D[u - 1];
}
for (int i = 0; i < N; ++i)
{
G[i] = (int*)realloc(G[i], D[i] * sizeof(int));
C[i] = (int*)realloc(C[i], D[i] * sizeof(int));
D[i] = 0;
}
fin.close();
fin.open("dijkstra.in", fstream::in);
fin >> N >> M;
for (int k = 0; k < M; ++k)
{
fin >> u >> v >> c;
G[u - 1][D[u - 1]] = v - 1;
C[u - 1][D[u - 1]] = c;
++D[u - 1];
}
fin.close();
}
void solve()
{
int u, v, c;
for (int i = 1; i < N; ++i)
P[i] = Inf;
Q.push(0);
while (!Q.empty())
{
u = Q.front();
Q.pop();
for (int i = 0; i < D[u]; ++i)
{
v = G[u][i];
c = C[u][i];
if (P[v] > P[u] + c)
{
P[v] = P[u] + c;
Q.push(v);
}
}
}
}
void write()
{
ofstream fout("dijkstra.out");
for (int i = 1; i < N; ++i)
fout << P[i] << ' ';
fout << '\n';
fout.close();
}
int main()
{
read();
solve();
write();
return 0;
}