hdu 1217 map+floyd
来源:互联网 发布:深圳龙华行知小学网站 编辑:程序博客网 时间:2024/05/15 05:18
#include<iostream>#include<map>#include<vector>#include<string>#include<algorithm>using namespace std;const int maxn=111;int n,m;map<string,int>mp;string s[maxn];string s1,s2;double g[maxn][maxn];bool can[maxn][maxn];int x,y,cas;double temp;bool vis[maxn];bool floyd(){ for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { if(!g[i][k]) continue; if(g[i][i] > 1.0) { return true; } for (int j=1; j<=n; j++) { if ( !g[k][j] ) continue; temp= g[i][k] * g[k][j]; if ( temp > g[i][j] ) { g[i][j] = temp; } } } } return false;}int main(){ cas=1; while(cin>>n) { memset(g,0,sizeof(g)); memset(vis,0,sizeof(vis)); memset(can,0,sizeof(can)); mp.clear(); if(!n) { break; } for(int i=1;i<=n;i++) { cin>>s[i]; mp[s[i]]=i; } cin>>m; for(int i=1;i<=m;i++) { cin>>s1>>temp>>s2; x=mp[s1]; y=mp[s2]; g[x][y]=temp; can[x][y]=true; } cout<<"Case "<<cas++<<": "; if(floyd()) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } } return 0;}