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;
}

posted on 2011-05-17 15:16  宇宙吾心  阅读(371)  评论(0编辑  收藏  举报

导航