Arbitrage

http://poj.org/problem?id=2240

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define MAXN 100
 5 const int INF=1<<28;
 6 using namespace std;
 7 double dis[MAXN][MAXN];
 8 char s[MAXN][MAXN];
 9 char s1[MAXN],s2[MAXN];
10 int n,t;
11 double r;
12 int main()
13 {
14     int tt=0;
15     while(scanf("%d",&n)&&n){\
16        memset(dis,INF,sizeof(dis));
17          tt++;
18        for(int i=0;i<n;i++)
19        {
20            scanf("%s",s[i]);
21            dis[i][i]=1;
22        }
23        scanf("%d",&t);
24        for(int j=0;j<t;j++)
25        {
26          scanf("%s %lf %s",s1,&r,s2);
27          int a,b;
28          for(int i=0;i<n;i++)
29          {
30              if(!strcmp(s[i],s1))
31              {
32                  a=i;
33                  break;
34              }
35          }
36          for(int j=0;j<n;j++)
37          {
38              if(!strcmp(s[j],s2))
39              {
40                  b=j;
41                  break;
42              }
43          }
44          dis[a][b]=r;
45        }
46        for(int k=0;k<n;k++)
47        {
48            for(int i=0;i<n;i++)
49            {
50                for(int j=0;j<n;j++)
51                {
52                    if(dis[i][j]<dis[i][k]*dis[k][j])
53                    {
54                        dis[i][j]=dis[i][k]*dis[k][j];
55                    }
56                }
57            }
58        }
59        int flag=0;
60        for(int i=0;i<n;i++)
61        {
62           if(dis[i][i]>1.0)
63           {
64               flag=1;
65               break;
66           }
67        }
68        if(flag) printf("Case %d: Yes\n",tt);
69        else printf("Case %d: No\n",tt);
70 
71     }
72     return 0;
73 }
View Code

 

posted @ 2013-08-14 10:35  null1019  阅读(164)  评论(0编辑  收藏  举报