hduoj_2066(floyd)

#include <stdio.h>
#include <stdlib.h>

int dis[1001][1001];

int adj[1001];
int want[1001];

int main()
{
	int t, s, d;

	int i, j, k;

	int a, b, c;

	int max, temp_max;

	while (EOF != scanf("%d %d %d", &t, &s, &d))
	{
		max = -1;
		for (i = 1; i <= 1000; i++)
		{
			for (j = 1; j <= 1000; j++)
			{
				if (i == j) dis[i][j] = 0;
				else dis[i][j] = INT_MAX;
			}
		}

		for (i = 1; i <= t; i++)
		{
			scanf("%d %d %d", &a, &b, &c);

			temp_max = a > b ? a : b;
			max = max > temp_max ? max : temp_max;

			if (dis[a][b] > c)
			{
				dis[a][b] = c;
				dis[b][a] = c;
			}
		}

		for (i = 1; i <= s; i++)
			scanf("%d", &adj[i]);

		for (i = 1; i <= d; i++)
			scanf("%d", &want[i]);

		// floyd
		for (i = 1; i <= max; i++)
		{
			for (k = 1; k <= max; k++)
			{
				if (dis[i][k] != INT_MAX)
				{
					for (j = 1; j <= max; j++)
					{
						if (dis[k][j] != INT_MAX && dis[i][j] > dis[i][k] + dis[k][j])
						{
							dis[i][j] = dis[i][k] + dis[k][j];
						}
					}
				}
			}
		}

		max = INT_MAX;

		for (i = 1; i <= s; i++)
		{
			for (j = 1; j <= d; j++)
			{
				if (max > dis[adj[i]][want[j]])
				{
					max = dis[adj[i]][want[j]];
				}
			}
		}

		printf("%d\n", max);
	}
	return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_32862515/article/details/80639507
今日推荐