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;}