洛谷P2888 [USACO07NOV]牛欄Cow Hurdles floyd
阿新 • • 發佈:2018-12-06
這一題把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(); }