Pagini recente » Cod sursa (job #987110) | Cod sursa (job #2531660) | Cod sursa (job #1804299) | Cod sursa (job #1565546) | Cod sursa (job #43848)
Cod sursa(job #43848)
#include <cstdio>
#include <string.h>
#define Nmax 512
#define Pmax 64
#define INF 0x3f3f3f3f
int n, m, p;
int cost[Nmax][Nmax], mat[Nmax][Pmax], home[Pmax], dist[Nmax], g[Nmax];
void citire()
{
int i, a, b, c;
memset(cost, 0x3f, sizeof(cost));
scanf("%d", &p);
scanf("%d", &n);
scanf("%d", &m);
for (i = 1; i <= m; ++i)
{
scanf("%d %d %d", &a, &b, &c);
cost[a][b] = cost[b][a] = c;
}
for (i = 1; i <= p; ++i)
scanf("%d", &home[i]);
}
void dijkstra(int s)
{
int i, j, best, ct, nod;
memset(dist, 0x3f, sizeof(dist));
dist[s] = 0;
ct = n;
for (i = 1; i <= n; ++i)
g[i] = i;
for (i = 1; i <= n; ++i)
{
best = 1;
for (j = 1; j <= ct; ++j)
if (dist[g[j]] < dist[g[best]])
best = j;
nod = g[best];
g[best] = g[ct--];
for (j = 1; j <= n; ++j)
if (dist[nod] + cost[nod][j] < dist[j])
dist[j] = dist[nod] + cost[nod][j];
}
}
void solve()
{
int i, j;
for (i = 1; i <= p; ++i)
{
dijkstra(home[i]);
for (j = 1; j <= n; ++j)
mat[j][i] = dist[j];
}
}
int main()
{
freopen("team.in", "r", stdin);
freopen("team.out", "w", stdout);
citire();
solve();
return 0;
}