蓝桥杯_蓝桥公园_floyd

    

//
#include<bits/stdc++.h>
using namespace std;

typedef long long LL;
const LL INF=0x3f3f3f3f3f3f3f3fLL;
const int N=444;
LL dp[N][N];
int n,m,q;

void in()
{
    memset( dp,0x3f,sizeof( dp ) );
    LL a,b,c,i;
    for( i=1;i<=m;i++ )     // <=m
    {
        cin>>a>>b>>c;       // 防止出现重边
        dp[a][b]=dp[b][a]=min( dp[a][b],c );
    }
}

void floyd()
{
    int i,j,k;
    for( k=1;k<=n;k++ )
        for( i=1;i<=n;i++ )
            for( j=1;j<=n;j++ )
                dp[i][j]=min( dp[i][j],dp[i][k]+dp[k][j] );
}

void out()
{
    int a,b;
    while( q-- )
    {
        cin>>a>>b;
        if( dp[a][b]==INF ) cout<<"-1"<<endl;
        else if( a==b )     cout<<"0"<<endl;        // 特判同地点
        else                cout<<dp[a][b]<<endl;
    }
}

int main()
{
    while( cin>>n>>m>>q )
    {
        in(); floyd(); out();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/124780581