TLE40分求助
查看原帖
TLE40分求助
662413
lmy_2011楼主2024/1/7 09:35
#include<bits/stdc++.h>//我不会写正解!
using namespace std;
int dp[205][205], n, m, q, t[205];
void floyd(int w)
{
	int k = 1;
	while (k <= n && t[k] <= w)
	{
		for (int i = 1 ; i <= n ; i++)
		{
			for (int j = 1 ; j <= n ; j ++)
			{
				dp[i][j] = dp[j][i] = min(dp[i][j], dp[i][k] + dp[k][j]);
			}
		}
		k++;
	}
	return ;
}
int work()
{
	int x, y, w;
	cin >> x >> y >> w;
	x++, y++;
	floyd(w);
	if ((t[x] > w || t[y] > w) || dp[x][y] == 0x3f3f3f3f)
	{
		return -1;
	}
	return dp[x][y];
} 
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m;
	memset(dp, 0x3f, sizeof dp);
	for (int i = 1 ; i <= n ; i++)
	{
		cin >> t[i];
		dp[i][i] = 0;
	}
	for (int i = 1 ; i <= m ; i++)
	{ 
		int x, y, w;
		cin >> x >> y >> w;
		x++, y++;
		dp[x][y] = dp[y][x] = min(dp[x][y], w);
	}
	cin >> q;
	while (q--)
	{
		cout << work() << "\n";
	}
	return 0;
}

2024/1/7 09:35
加载中...