1. 程式人生 > >洛谷P2888 [USACO07NOV]牛欄Cow Hurdles floyd

洛谷P2888 [USACO07NOV]牛欄Cow Hurdles floyd

傳送門

這一題把floyd的狀態方程稍微改一下就行了

dp[i][j]=min(dp[i][j],max(dp[i][k],dp[k][j]))

#include<iostream>
using namespace std;
#define INF 99999999
int n,m,t;
int dp[305][305];
int minn(int a,int b,int c){
    a=min(a,b);
    a=min(a,c);
    return a;
}
void solve()
{
    int i,j;
    cin>>n>>m>>t;
    
for(i=1;i<=n;i++)for(j=1;j<=n;j++)dp[i][j]=INF; for(i=1;i<=m;i++) { int a,b,c; cin>>a>>b>>c; dp[a][b]=c; } for(int k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(dp[i][k]!=INF&&dp[k][j]!=INF)//
i->k->j有通路 dp[i][j]=min(dp[i][j],max(dp[i][k],dp[k][j])); } for(i=1;i<=t;i++) { int a,b; cin>>a>>b; if(dp[a][b]==INF)cout<<"-1\n"; else cout<<dp[a][b]<<endl; } } int main() { solve(); }