zoukankan      html  css  js  c++  java
  • POJ 3615(FLOYD应用)

    大致题意:有N个木桩,和M个木桩对之间的高度差(从x跳到y需要往上跳的高度)。从x跳跃到y的路径消耗的体力值是路径中的一个最大高度差。求一条消耗体力最小的路径。

    思路:-和POJ 1797类似,只是这道题的没有固定起点和终点,而是在询问中给出,询问还特别多,这个不用想,肯定要预处理出来答案的

    第一次floyd处理的是连通性,map[i][j]此时的含义是从i到j的最短路径长度

    第二次floyd处理的是两点间路径的最小的最大值,嗯,就是这样

    View Code
     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cstring>
     4 #include <iostream>
     5 using namespace std;
     6 int map[350][350],n,m,q;
     7 void read()
     8 {
     9     memset(map,0x3f,sizeof map);
    10     for(int i=1,a,b,c;i<=m;i++)
    11     {
    12         scanf("%d%d%d",&a,&b,&c);
    13         map[a][b]=c;
    14     }
    15     for(int i=1;i<=n;i++) map[i][i]=0;
    16 }
    17 void floyd()
    18 {
    19     for(int k=1;k<=n;k++)
    20         for(int i=1;i<=n;i++)
    21             for(int j=1;j<=n;j++)
    22                 map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
    23     for(int i=1;i<=n;i++) map[i][i]=0x7f7f7f7f;
    24     for(int k=1;k<=n;k++)
    25         for(int i=1;i<=n;i++)
    26             for(int j=1;j<=n;j++)
    27                 if(map[i][j]<=99999999)
    28                     map[i][j]=min(map[i][j],max(map[i][k],map[k][j]));
    29 }
    30 void go()
    31 {
    32     floyd();
    33     int a,b;
    34     while(q--)
    35     {
    36         scanf("%d%d",&a,&b);
    37         if(a==b) printf("0\n");
    38         else
    39         {
    40             if(map[a][b]>99999999) printf("-1\n");
    41             else printf("%d\n",map[a][b]);
    42         }
    43     }
    44 }
    45 int main()
    46 {
    47     while(scanf("%d%d%d",&n,&m,&q)!=EOF)
    48     {
    49         read();
    50         go();
    51     }
    52     return 0; 
    53 }
    没有人能阻止我前进的步伐,除了我自己!
  • 相关阅读:
    CodeForces
    网络流
    poj 2185
    树的分治学习
    数位DP
    URAL 1969. Hong Kong Tram
    hdu 4759 Poker Shuffle
    hdu3712 Detector Placement
    分块思想
    莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/proverbs/p/2657725.html
Copyright © 2011-2022 走看看