poj 3615
题意:奶牛们为了比赛要刻苦训练跳木桩。现在有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; }