Floyd 0pts求调
查看原帖
Floyd 0pts求调
1056264
zhaopeiyuan楼主2024/8/19 18:24
#include <iostream>
using namespace std;

#define int long long

void road(int dp[201][201][201],int t[205],int x,int y,int t1,int n)
{
    for (int i = 1;i <= n;i++)
    {
        for (int j = 1;j <= n;j++)
        {
            if (t[i] > t1 || t[j] > t1)
            {
                dp[0][i][j] = 1e15;
            }
        }
    }
    for (int i = 1;i <= n;i++)
    {
        for (int j = 1;j <= n;j++)
        {
            for (int q = 1;q <= n;q++)
            {
                dp[i][j][q] = min(dp[i - 1][j][q],dp[i - 1][i][j] + dp[i - 1][j][q]);
            }
        }
    }
    if (t[x + 1] > t1 || t[y + 1] > t1 || dp[n][x + 1][y + 1] == 1e15)
    {
        cout << -1 << endl;
    }
    else
    {
        cout << dp[n][x + 1][y + 1] << endl;
    }
}

signed main()
{
    int n,m;
    cin >> n >> m;
    int t[205] = {};
    int dp[201][201][201] = {};
    for (int i = 1;i <= n;i++)
    {
        cin >> t[i];
    }
    for (int i = 1;i <= n;i++)
    {
        for (int j = 1;j <= n;j++)
        {
            if (i == j) dp[0][i][j] = 0;
            else dp[0][i][j] = 1e15;
        }
    }
    for (int i = 1;i <= m;i++)
    {
        int x,y,w;
        cin >> x >> y >> w;
        dp[0][x][y] = dp[0][y][x] = w;
    }
    int q;
    cin >> q;
    for (int i = 1;i <= q;i++)
    {
        int x,y,t1;
        cin >> x >> y >> t1;
        road(dp,t,x,y,t1,n);
    }
    return 0;
}
2024/8/19 18:24
加载中...