• uva 436(floyd变形)


    题意:有若干种货币他们之间存在汇率,然后你要判断的是你能不能通过交换货币是你手中的一种货币不断的升值。

    思路:floyd变形Map[i][j] = max(Map[i][j], Map[i][k]*Map[k][j]) 状态表示i交换到j最多能换多少。然后最后统计一下所有自己欢自己是不是有大于1就可以了。

    代码如下:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <cmath>
     5 #include <cstring>
     6 #include <algorithm>
     7 #include <queue>
     8 #include <stack>
     9 #include <vector>
    10 #include <set>
    11 #include <map>
    12 #define MP(a, b) make_pair(a, b)
    13 #define PB(a) push_back(a)
    14 
    15 using namespace std;
    16 
    17 typedef long long ll;
    18 typedef pair<int ,int> pii;
    19 typedef pair<unsigned int, unsigned int> puu;
    20 typedef pair<int ,double> pid;
    21 typedef pair<ll, int> pli;
    22 typedef pair<int, ll> pil;
    23 
    24 const int INF = 0x3f3f3f3f;
    25 const double eps = 1e-6;
    26 const int LEN = 110;
    27 double Map[LEN][LEN];
    28 int n, m;
    29 string name[LEN];
    30 map<string, int> mp;
    31 
    32 void floyd()
    33 {
    34     for(int k=0; k<n; k++){
    35         for(int i=0; i<n; i++){
    36             for(int j=0; j<n; j++){
    37                 if(Map[i][j] < Map[i][k]*Map[k][j])
    38                     Map[i][j] = Map[i][k] * Map[k][j];
    39             }
    40         }
    41     }
    42 }
    43 
    44 int main()
    45 {
    46 //    freopen("in.txt", "r", stdin);
    47 
    48     int kase = 1;
    49     while(scanf("%d", &n)!=EOF && n){
    50         for(int i=0; i<n; i++){
    51             cin >> name[i];
    52             mp[name[i]] = i;
    53         }
    54         scanf("%d", &m);
    55         memset(Map, 0, sizeof Map);
    56         double val;string a, b;
    57         for(int i=0; i<m; i++){
    58             cin >> a >> val >> b;
    59             Map[mp[a]][mp[b]] = val;
    60         }
    61         floyd();
    62         int ans = 0;
    63         for(int i=0; i<n; i++){
    64             if(Map[i][i]>1) ans = 1;
    65         }
    66         printf("Case %d: ", kase++);
    67         if(ans)printf("Yes
    ");
    68         else printf("No
    ");
    69     }
    70     return 0;
    71 }
    View Code
    奔跑吧!少年!趁着你还年轻
  • 相关阅读:
    20201208史逸霏第六章学习笔记
    第三章笔记
    实现ls
    mystat
    改进ls
    第十章笔记
    cat userlist
    第七、八章笔记
    mypwd
    类成员函数指针写入map里怎么才能调用它呢?转载
  • 原文地址:https://www.cnblogs.com/shu-xiaohao/p/3534000.html
Copyright © 2020-2023  润新知