标签:最短路
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 0
Sample Output
Case 1: Yes Case 2: No 题解: 判断是否有大于1的环,用floryd算法,判断大于1的环; AC代码:#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <cmath> #include <queue> #include <map> #include <set> #define eps 1e-9 using namespace std; typedef long long ll; typedef pair<int,int>P; const int M = 200; const int INF = 0x3f3f3f3f; const int mod = 10000007; double dp[M][M]; string s; map<string,int>mp; int main(){ int n,cnt = 0; while(cin>>n && n){ mp.clear(); for(int i = 1; i <= n; i++){ cin>>s; mp[s] = i; } int m; cin>>m; for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ if(i == j) dp[i][j] = 1; else dp[i][j] = 0; } } while(m--){ int u,v; double c; cin>>s; u = mp[s]; scanf("%lf",&c); cin>>s; v = mp[s]; dp[u][v] = max(dp[u][v],c); } for(int k = 1; k <= n; k++){ for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ dp[i][j] = max(dp[i][j],dp[i][k] * dp[k][j]); } } } int vis = 0; for(int i = 1; i <= n && !vis; i++){ if(dp[i][i] > 1) vis = 1; } printf("Case %d: ",++cnt); if(vis) puts("Yes"); else puts("No"); } return 0; }
标签:最短路
原文地址:http://blog.csdn.net/zsgg_acm/article/details/43713671