NYOJ 188 Arbitrage

View Code
 1 /*
 2 题意:
 3 货币之间存在着转换 ,从一种货币转换到
 4 另一种货币有有一个转换率,有没有这种情况
 5 一种货币经过几次转换再回到这个货币时
 6 会增值
 7 
 8 思路:
 9 这相当与一个路径问题,找到各个点的最大距离
10 每次从一条边的左边的货币开始转换,看是否能
11 增值 有几条边循环几次 
12 */ 
13 #include<iostream>
14 #include<cstring>
15 
16 using namespace std;
17 
18 struct node
19 {
20    int a,b;
21    double r;
22 }E[10000];//存 储 从  a 到  b 及 转 换 率  r 
23 double d[2001];//存 储  各种货币顶点 
24 char a[32][100];
25 double dmin=0.0000001;
26 
27 int main()
28 {
29     int n,m,i,flag,evu,ct=0,t1,t2,j;
30     double rab;
31     char cha[30],chb[30];
32     while(cin>>n&&n)
33     {
34       ++ct;
35       memset(E,0,sizeof(E));
36        for(i=0;i<n;++i)
37        {
38          cin>>a[i];
39        }
40        cin>>m;
41        
42        for(i=0;i<m;++i)
43        {
44           cin>>cha>>rab>>chb;
45           for(j=0;j<n;++j)
46            {
47              if(strcmp(cha,a[j])==0)t1=j;
48              if(strcmp(chb,a[j])==0)t2=j;
49            }
50           E[i].a=t1;
51           E[i].b=t2;
52           E[i].r=(rab > E[i].r ? rab : E[i].r);//注意两个点之间有多个点 
53        }
54        evu=0;//判断是否可以增值 
55        
56        for(int j=0;j<m;++j)
57        {
58          memset(d,0,sizeof(d));
59          int temp=E[j].a;//依次以 每条边的左端为起点 
60          d[temp]=1;
61          
62          while(d[temp]<=1+dmin)
63          {
64             flag=0;
65             
66            for(i=0;i<m;++i)
67            if(d[E[i].b]+dmin<d[E[i].a]*E[i].r)
68            {
69               d[E[i].b]=d[E[i].a]*E[i].r;
70               flag=1;
71            }
72            
73            if(!flag)//如果没有更新则跳出 
74            {
75              // if(d[temp]>1+dmin)evu=1;
76              break;
77            }
78          }
79         
80          if(flag)//是由于 d[temp]<=1 + dimin跳出循环的 
81          {
82            evu=1;
83            break;
84          } 
85        }
86        
87        if(evu)cout<<"Case "<<ct<<": Yes"<<endl<<endl;
88        else cout<<"Case "<<ct<<": No"<<endl<<endl;
89     }
90    // system("pause");
91     return 0;
92 }
93         

 

posted @ 2012-04-10 20:54  知行执行  阅读(148)  评论(0编辑  收藏  举报