标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 17374 | Accepted: 7312 |
Description
Input
Output
Sample Input
3 USDollar BritishPound FrenchFranc 3 USDollar 0.5 BritishPound BritishPound 10.0 FrenchFranc FrenchFranc 0.21 USDollar 3 USDollar BritishPound FrenchFranc 6 USDollar 0.5 BritishPound USDollar 4.9 FrenchFranc BritishPound 10.0 FrenchFranc BritishPound 1.99 USDollar FrenchFranc 0.09 BritishPound FrenchFranc 0.19 USDollar 0
Sample Output
Case 1: Yes Case 2: No
这题较简单,使用bellman-ford算法就可以了,注意输出,我因为输出WA几次
1 #include <iostream> 2 #include<map> 3 #include<string.h> 4 using namespace std; 5 struct edge{ 6 int u,v; 7 float rate; 8 } e[40*40]; 9 int cur_num,edge_num; 10 float dis[40]; 11 map<string,int> mp; 12 int Bellman_ford(int c){ 13 memset(dis,0,30*sizeof(float)); 14 dis[c]=1.0; 15 for(int i=0;i<cur_num;i++){ 16 for(int j=0;j<edge_num;j++){ 17 if(dis[e[j].v]<dis[e[j].u]*e[j].rate){ 18 dis[e[j].v]=dis[e[j].u]*e[j].rate; 19 } 20 } 21 } 22 if(dis[c]>1.0) 23 return 1; 24 else 25 return 0; 26 } 27 int main() { 28 int count=0; 29 cin>>cur_num; 30 while(cur_num){ 31 mp.clear(); 32 for(int i=0;i<cur_num;i++){ 33 string s; 34 cin>>s; 35 mp[s]=i; 36 } 37 cin>>edge_num; 38 for(int i=0;i<edge_num;i++){ 39 string s1,s2; 40 float rate; 41 cin>>s1>>rate>>s2; 42 e[i].u=mp[s1]; 43 e[i].v=mp[s2]; 44 e[i].rate=rate; 45 } 46 int flag=0; 47 for(int i=0;i<cur_num;i++){ 48 flag=Bellman_ford(i); 49 if(flag) 50 break; 51 } 52 53 if(flag) 54 cout<<"Case "<<++count<<": Yes"<<endl; 55 else 56 cout<<"Case "<<++count<<": No"<<endl; 57 cin>>cur_num; 58 } 59 return 0; 60 }
Arbitrage - poj 2240 (Bellman-ford)
标签:
原文地址:http://www.cnblogs.com/sdxk/p/4638196.html