Floyd全WA+1
查看原帖
Floyd全WA+1
915232
gzy123456楼主2023/11/5 19:54
#include <bits/stdc++.h>
#define ll long long
#define M 5000

using namespace std;

const int N = INT_MAX;
int n, m, t[M], q, dis[M][M], vis[M];

int main()
{
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			dis[i][j] = N;
			dis[i][i] = 0;
		}
	}

	cin >> n >> m;

	for (int i = 0; i < n; i++)
	{
		cin >> t[i];
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
		{
			dis[i][j] = N;
		}
	}

	for (int i = 0; i < m; i++)
	{
		int x, y, z;
		cin >> x >> y >> z;
		dis[x][y] = dis[y][x] = z;
	}

	cin >> q;

	while (q > 0)
	{
		int Time, u, v;
		cin >> u >> v >> Time;

		for (int k = 0; k < n; k++)
		{
			if (t[k] <= Time && vis[k] == 0)
			{
				for (int i = 0; i < n; i++)
				{
					for (int j = 0; j < n; j++)
					{
						if (dis[i][k] + dis[k][j] < dis[i][j])
						{
							dis[i][j] = dis[i][k] + dis[k][j];
						}
					}
				}

				vis[k] = 1;
			}
		}
       
		if (dis[u][v] != N && t[u] <= Time && t[v] <= Time)
			cout << dis[u][v];
		else
			cout << "-1";

		cout << endl;

		q--;
	}

	//fclose(stdin);
	//fclose(stdout);
	system("pause");
	return 0;
}

2023/11/5 19:54
加载中...