• hdu 1207Arbitrage 最短路劲


    有点想要敲自己一顿了,这道题属于图论当中的比较简单的最短路径,实在是有点汗颜,本来觉得自己思路也是基本上理解了的,看了自己那本图论的算法设计的教材之后,感觉还是蛮好的。

    但是现在一做题目竟然wa了  这么多边。。。 

    呜呜呜~~~

    不过幸好是最后这一刻还是来了。。。

    因为对于这个题目当中的图而言是乘法所以就相当于说是给图加上了负权值的边,所以我们只要用Floyd算法

    有兴趣的话可以去看一下这位大哥写的东西。

    http://www.cnblogs.com/twjcnblog/archive/2011/09/07/2170306.html

    具体代码如下:

    View Code
     1   #include<iostream>
     2   #define max(a,b) a>b?a:b
     3   using namespace std;
     4   int main()
     5   {
     6      char cur[31][31],s[31],e[31];
     7      double temp[31][31],w;
     8      int n,t=0,type;
     9      while(scanf("%d",&n)!=EOF&&n)
    10      {
    11           for(int i=0;i<n;i++)
    12           {
    13              getchar();
    14              scanf("%s",cur[i]);        
    15              for(int j=0;j<n;j++)
    16              {
    17                   if(i==j)temp[i][j]=1.0;
    18                   else
    19                   temp[i][j]=0.0;        
    20              }
    21           }
    22           scanf("%d",&type);
    23           for(int i=0;i<type;i++)
    24           {
    25               getchar();
    26               scanf("%s",s);
    27               int j,k;
    28               for(j=0;j<n;j++)if(strcmp(s,cur[j])==0)break;
    29               scanf("%lf",&w);
    30               getchar();
    31               scanf("%s",e); 
    32               for(k=0;k<n;k++)if(strcmp(e,cur[k])==0)break;
    33               temp[j][k]=w;
    34           }
    35           for(int i=0;i<n;i++)
    36           {
    37               for(int j=0;j<n;j++)
    38               {
    39                   for(int k=0;k<n;k++)
    40                   {
    41                       temp[j][k]=max(temp[j][k],temp[j][i]*temp[i][k]);
    42                   }        
    43               }       
    44           }
    45           if(temp[0][0]>1)printf("Case %d: Yes\n",++t);
    46           else
    47           printf("Case %d: No\n",++t);
    48      }
    49      return 0;    
    50   }
  • 相关阅读:
    Discrete Logging
    P1378 油滴扩展
    P3390 【模板】矩阵快速幂
    RMQ算法
    P1372 又是毕业季I
    P1440 求m区间内的最小值
    高效判断素数方法
    阿尔贝喝我
    浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
    顺序队列之C++实现
  • 原文地址:https://www.cnblogs.com/nuoyan2010/p/2667113.html
Copyright © 2020-2023  润新知