标签:des style io os ar for strong sp div
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 16127 | Accepted: 6780 |
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 0Sample Output
Case 1: Yes Case 2: No题意:题目首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率。如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 BritishPound。问在这N种货币中是否有货币可以经过若干次兑换后,兑换成原来的货币可以使货币量增加。思路:和poj上另一道最短路的题Currency Exchange差不多。都是求正环。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> #include <map> using namespace std; int n,m; double dis[50][50],rate; map<string,int>name;//申请图的内存空间,string代表字符串,int代表数值;就是给那些钱币标号。 void floyd() { int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) dis[i][j]=max(dis[i][j],dis[i][k]*dis[k][j]);//变形在这里 } int main() { char str[110],str1[110],str2[110]; int cnt=1; int i,j; while(~scanf("%d",&n)) { if(n==0) break; for(i=1;i<=n;i++) { scanf("%s",str); name[str]=i;//标号 } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) if(i==j) dis[i][j]=1; else dis[i][j]=0; } scanf("%d",&m); for(i=0;i<m;i++) { scanf("%s%lf%s",str1,&rate,str2); dis[name[str1]][name[str2]]=rate; } floyd(); int flag=0; for(i=1;i<=n;i++) if(dis[i][i]>1)//如果dis[i][i]>1证明存在正权回路 { flag=1; break; } printf("Case %d: ",cnt++); if(flag) printf("Yes\n"); else printf("No\n"); } }
标签:des style io os ar for strong sp div
原文地址:http://blog.csdn.net/u013486414/article/details/40411447