zoukankan      html  css  js  c++  java
  • 洛谷P2888 [USACO07NOV]牛栏Cow Hurdles

    题目描述

    Farmer John 想让她的奶牛准备郡级跳跃比赛,贝茜和她的伙伴们正在练习跨栏。她们很累,所以她们想消耗最少的能量来跨栏。 显然,对于一头奶牛跳过几个矮栏是很容易的,但是高栏却很难。于是,奶牛们总是关心路径上最高的栏的高度。 奶牛的训练场中有 N (1 ≤ N ≤ 300) 个站台,分别标记为1…N。所有站台之间有M (1 ≤ M ≤ 25,000)条单向路径,第i条路经是从站台Si开始,到站台Ei,其中最高的栏的高度为Hi (1 ≤ Hi ≤ 1,000,000)。无论如何跑,奶牛们都要跨栏。 奶牛们有 T (1 ≤ T ≤ 40,000) 个训练任务要完成。第 i 个任务包含两个数字 Ai 和 Bi (1 ≤ Ai ≤ N; 1 ≤ Bi ≤ N),表示奶牛必须从站台Ai跑到站台Bi,可以路过别的站台。奶牛们想找一条路径从站台Ai到站台Bi,使路径上最高的栏的高度最小。 你的任务就是写一个程序,计算出路径上最高的栏的高度的最小值。

    题目分析:

    咋一看,一股浓浓的最短路气息扑面而来,首先考虑dijkstra,发现单源最短路并不适用于多个起点,于是把目光投向了数据范围。

    n300nleq300?

    难,难道这就是传说中的的Floyd?
    做梦都想用呀(虽然现在主攻dijkstra了
    别急,事情并不是你想象的那么简单。细看题目,我们发现要求出的结果是最高的栏杆,而不是栏杆高度之和!
    其实不就是把转移式换一下吗。。。
    所以和谐的状态转移方程就出来了:

    f[i][j]=fmin(f[i][j],fmax(f[i][k],f[k][j]));(1<=k,i,j<=n)f[i][j]=fmin(f[i][j],fmax(f[i][k],f[k][j]));(其中1<=k,i,j<=n)

    这个式子中因为要取最大值,所以每两个栏杆是要客观的取最大值(题意),而线路的最高栏杆我们就能主观的取最小值喽。

    然后就是代码:

    代码:

    #include<cstdio>
    #include<cmath>
    using namespace std;
    int f[305][305];
    int main()
    {
    	int n,m,t;
    	scanf("%d%d%d",&n,&m,&t);
    	int x,y,z;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=n;j++)
    		{
    			f[i][j]=2147483647;//求最小值,初始化最大值
    		}
    	}
    	for(int i=1;i<=m;i++)
    	{
    		scanf("%d%d%d",&x,&y,&z);
    		f[x][y]=z;//邻接矩阵存图法
    	}
    	
    	for(int k=1;k<=n;k++)
    	{
    		for(int i=1;i<=n;i++)
    		{
    			for(int j=1;j<=n;j++)
    			{
    				f[i][j]=fmin(f[i][j],fmax(f[i][k],f[k][j]));
    			}
    		}
    	}
    	for(int i=1;i<=t;i++)
    	{
    		scanf("%d%d",&x,&y);
    		if(f[x][y]==2147483647)//别忘特判
    		{
    			printf("-1
    ");
    			continue;
    		}
    		printf("%d
    ",f[x][y]);
    	}
    	return 0;
    } 
    
  • 相关阅读:
    CSS浮动(float、clear)通俗讲解
    JAVA 类的加载
    数据库操作 delete和truncate的区别
    正则表达式 匹配相同数字
    Oracle EBS OM 取消订单
    Oracle EBS OM 取消订单行
    Oracle EBS OM 已存在的OM订单增加物料
    Oracle EBS OM 创建订单
    Oracle EBS INV 创建物料搬运单头
    Oracle EBS INV 创建物料搬运单
  • 原文地址:https://www.cnblogs.com/vercont/p/10210080.html
Copyright © 2011-2022 走看看