zoukankan      html  css  js  c++  java
  • POJ 2240 Arbitrage

    题意:给一些国家之间的货币交换汇率,问是否可以通过一些货币交换产生盈利

    思路:bellman算法判断是否存在正权回路

    PS:可能存在相同国家之间的货币交换、此时需要特判一下

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<cmath>
     4 const int qq=35;
     5 char country[qq][qq];
     6 double dis[qq];
     7 int n,m;
     8 struct Node
     9 {
    10     int s,e;
    11     double w;
    12 }map[qq<<6];
    13 bool bellman()
    14 {
    15     memset(dis,0,sizeof(dis));
    16     dis[1]=1000.0;
    17     for(int j,i=1;i<=n-1;++i)
    18         for(j=1;j<=m;++j)
    19             if(dis[map[j].e]<dis[map[j].s]*map[j].w)
    20                 dis[map[j].e]=dis[map[j].s]*map[j].w;
    21     for(int j=1;j<=m;++j)
    22         if(dis[map[j].e]<dis[map[j].s]*map[j].w)
    23             return true;
    24     return false;
    25 }
    26 int main()
    27 {
    28     int k=1;
    29     while(~scanf("%d",&n)&&n){
    30         for(int i=1;i<=n;++i)
    31             scanf("%s",country[i]);
    32         scanf("%d",&m);
    33         int a,b;
    34         double c;
    35         char s1[qq],s2[qq];
    36         int flag=0;
    37         for(int i=1;i<=m;++i){
    38             scanf("%s%lf%s",s1,&c,s2);
    39             if(strcmp(s1,s2)==0&&c>1.0){
    40                 flag=1;
    41                 break;
    42             }
    43             map[i].w=c;
    44             for(int j=1;j<=n;++j)
    45                 if(strcmp(country[j],s1)==0){
    46                     map[i].s=j;
    47                     break;
    48                 }
    49             for(int j=1;j<=n;++j)
    50                 if(strcmp(country[j],s2)==0){
    51                     map[i].e=j;
    52                     break;
    53                 }
    54         }
    55         printf("Case %d: ",k++);
    56         if(flag){
    57             printf("Yes
    ");
    58             continue;
    59         }
    60         if(bellman())    printf("Yes
    ");
    61         else            printf("No
    ");
    62     }
    63     return 0;
    64 }
  • 相关阅读:
    linux 命令行远程登录 后台运行命令的方法
    再议perl写多线程端口扫描器
    perl 函数参数传递与返回值(一)
    Linux 删除带有特殊字符的文件
    桌面云的四大协议解析
    RemoteBox 1.6 发布,VirtualBox 管理工具
    gsoap
    Open Compute Project
    基于 Arduino 开发板,这款插座是可编程且开源的
    minnowboard
  • 原文地址:https://www.cnblogs.com/sasuke-/p/5458808.html
Copyright © 2011-2022 走看看