Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6414 Accepted Submission(s): 2966
#include<iostream> #include<map> using namespace std; const int maxx = 35; map<string,int> m; double gra[maxx][maxx]; int main() { int n; int cas=1; while(~scanf("%d",&n)&&n!=0) { string a; int t=1; m.clear(); for(int i=0; i<=n; i++) for(int j=0; j<=n; j++) { if(i!=j) gra[i][j]=0; else gra[i][j]=1; } for(int i=0; i<n; i++) { cin>>a; if(!m.count(a)) { m.insert(pair<string,int>(a,t++)); } } int tra=0; scanf("%d",&tra); string c,d; double rate; for(int i=0; i<tra; i++) { cin>>c>>rate>>d; //cout<<c<<endl<<rate<<endl<<d<<endl; gra[m[c]][m[d]]=rate; // cout<<gra[m[c]][m[d]]<<endl; } for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { for(int k=1; k<=n; k++) { gra[j][k]=(gra[j][i]*gra[i][k]>gra[j][k])?(gra[j][i]*gra[i][k]):gra[j][k]; } } } int flag=0; for(int i=1; i<=n; i++) { //cout<<gra[i][i]<<endl; if(gra[i][i]>1) { printf("Case %d: Yes\n",cas++); flag=1; break; } } if(!flag) printf("Case %d: No\n",cas++); } return 0; }
原文:http://www.cnblogs.com/superxuezhazha/p/5425498.html