1 条题解

  • 0
    @ 2025-4-8 13:37:33

    解题思路:

    1. 首先需要计算出所有地点之间的最短路径。因为给定的距离矩阵可能存在不连通的情况(距离为(-1)),且关系不对称,所以可以使用弗洛伊德算法(Floyd - Warshall Algorithm)来计算任意两点之间的最短路径。
    2. 计算出所有不同地点对的数量,根据给定的成功概率p,确定满足成功概率所需的最短路径数量。
    3. 遍历所有地点对的最短路径,从小到大排序,找到满足成功概率要求的最小距离。

    实现步骤

    1. 读取输入:读取测试用例数量、成功概率p、地点数量n以及距离矩阵。
    2. 计算最短路径:使用弗洛伊德算法计算所有地点之间的最短路径,更新距离矩阵。
    3. 统计满足概率的最短路径:生成所有不同地点对,计算每个地点对的最短路径,将其按从小到大排序,根据成功概率p确定最小距离。
    4. 输出结果:按照输出格式要求,输出每个测试用例的结果。 代码:
    #include<iostream>
    #include<algorithm>
    #include<cmath>
    #include <cstring>
    using namespace std;
    int g[101][101];
    int d[101];
    int min(int a,int b)
    {
        return a<b?a:b;
    }
    int main()
    {
        int i,j,k,n,p,cnt,test;
        cin>>test;
        for(cnt=1;cnt<=test;cnt++)
        {
            memset(g,0,sizeof(g));
            memset(d,0,sizeof(d));
            cin>>p;
            cin>>n;
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                {
                    cin>>g[i][j];
                }
            for(k=1;k<=n;k++)
                for(i=1;i<=n;i++)
                    for(j=1;j<=n;j++)
                    {
                        if(g[i][k]>=0&&g[k][j]>=0)
                        {
                            if(g[i][j]==-1)
                                g[i][j]=g[i][k]+g[k][j];
                            else
                                g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
                        }
                    }
            k=0;
            for(i=1;i<=n;i++)
                for(j=1;j<=n;j++)
                {
                    if(g[i][j]>0)
                    {
                        d[k++]=g[i][j];
                    }
                }
            sort(d,d+k);
            i=n*(n-1)*p;
            i=i/100+(i%100!=0);
            //i=ceil(n*(n-1)*p/100.0);
            printf("Scenario #%d:\n",cnt);
            printf("%d\n\n",d[int(i)-1]);
        }
        return 0;
    }  
    
    
    • 1

    信息

    ID
    1497
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    1
    上传者