标签:
链接:点击打开链接
题意:有一些钱的汇率,看是否有一种钱经过兑换能够产生利润
代码;
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> using namespace std; double dis[300][300]; int n,m; struct node{ char str[500]; }s[500]; int cmp(struct node a,struct node b){ return strcmp(a.str,b.str)<0; } int binsearch(char *temp){ int low,high,mid; low=1;high=n; while(low<=high){ mid=(low+high)/2; if(strcmp(s[mid].str,temp)==0) return mid; else if(strcmp(s[mid].str,temp)>0) high=mid-1; else if(strcmp(s[mid].str,temp)<0) low=mid+1; } } //二分查找字符串位置 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]); } //floyd算法模板 int main(){ //求有向图最大环 char temp[500]; int i,j,a,b,cur,sign; double c; cur=1; while(scanf("%d",&n)!=EOF&&n){ for(i=1;i<=n;i++) for(j=1;j<=n;j++){ if(i==j) dis[i][j]=1; //i,j相等时要将dis数组值赋为1 else dis[i][j]=0; } for(i=1;i<=n;i++) cin>>s[i].str; sort(s+1,s+n+1,cmp); scanf("%d",&m); for(i=0;i<m;i++){ cin>>temp; a=binsearch(temp); cin>>c; cin>>temp; b=binsearch(temp); dis[a][b]=c; //找出a,b位置后赋值 } floyd(); sign=0; for(i=1;i<=n;i++) if(dis[i][i]>1){ //找出换完后大于1的 sign=1; break; } if(sign) printf("Case %d: Yes\n",cur++); else printf("Case %d: No\n",cur++); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/stay_accept/article/details/47784657