题意:奶牛们为了比赛要刻苦训练跳木桩。现在有n个木桩,并知道其中m对木桩的高度差。问奶牛们能从木桩u跳到木桩v,最少的跳跃高度是多少?
代码:
#include<iostream>
#include<fstream>
using namespace std;
int n,m;
int map[301][301];
int dp[301][301];
void read(){
// ifstream cin("in.txt");
int i,j,k,s,t;
int q;
scanf("%d%d%d",&n,&m,&q);
memset(map,-1,sizeof(map));
for(i=1;i<=m;i++)
{
// cin>>s>>t>>j;
scanf("%d%d%d",&s,&t,&j);
map[s][t]=j;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dp[i][j]=map[i][j];
for(i=1;i<=n;i++)
dp[i][i]=0;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(dp[i][k]!=-1&&dp[k][j]!=-1)
{
if(dp[i][j]!=-1)
dp[i][j]=min(dp[i][j],max(dp[k][j],dp[i][k]));
else
dp[i][j]=max(dp[i][k],dp[k][j]);
}
for(i=1;i<=q;i++)
{
// cin>>s>>t;
scanf("%d%d",&s,&t);
cout<<dp[s][t]<<endl;
}
}
int main(){
read();
return 0;
}