poj 3615 Cow Hurdles

本文深入探讨了动态规划(DP)和图论在解决有向图中从点u到点v路径问题的应用,具体关注于找到权值最大的那条边在所有路径中权值最小的情况。通过状态转移方程dp[i][j]表示从i到j的最小的最大值,文章展示了如何通过算法求解此类问题,并提供了实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续复习

DP,图论

题意:有向图,n个点,m条边,t个查询。从点u到点v可能有多条路径,找出一条,使这条路径的权值最大的那条边的值在所有路径中是最小的,即最大值最小

状态转移方程:dp[i][j]表示从i到j的最小的最大值。

dp[i][j] = min{   dp[i][j]   ,   max(dp[i][k] , dp[k][j])   }

#include <cstdio>
#include <cstring>
#define N 310
#define INF 0x3f3f3f3f
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))

int dp[N][N];

int main()
{
   int n,m,t;
   scanf("%d%d%d",&n,&m,&t);
   //while(scanf("%d%d%d",&n,&m,&t)!=EOF)
   //{
      memset(dp,0x3f,sizeof(dp));
      for(int i=0; i<m; i++)
      {
         int u,v,w;
         scanf("%d%d%d",&u,&v,&w);
         dp[u][v] = w;
      }

      for(int k=1; k<=n; k++)
         for(int i=1; i<=n; i++)
            for(int j=1; j<=n; j++)
            {
               int temp = max(dp[i][k] , dp[k][j]);
               dp[i][j] = min(dp[i][j] , temp);
            }

      for(int i=0; i<t; i++)
      {
         int u,v;
         scanf("%d%d",&u,&v);
         if(dp[u][v]  == INF)
            printf("-1\n");
         else
            printf("%d\n",dp[u][v]);
      }
   //}
   return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值