码迷,mamicode.com
首页 > 其他好文 > 详细

poj 2240 Arbitrage(bellman-ford 判断正环)

时间:2015-01-21 21:52:56      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:

http://poj.org/problem?id=2240

 

基本和poj 1860相同 只是把单点变成了任意点 做完1860再做这题就完全把思路套上就过了 

做完才发现网上的题解都用的是floyd 不过整体思路都是大同小异吧

不过在效率上好像就低下了太多= =

 

技术分享
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
#include<stack>
#include<iostream>
#include<algorithm>
using namespace std;
char str[50][50];
double u[1000],v[1000],w[1000];
double d[100];
int n,m;
int find(char*s)
{
   for(int i=1;i<=n;i++)
   {
       if(strcmp(s,str[i])==0)
        return i;
   }
}
int main()
{
    int i,j,k;
    int casee=1;
    char l[50],r[50];
    while(scanf("%d",&n)!=EOF)
    {
        if(n==0) break;
        for(i=1;i<=n;i++)
          scanf("%s",str[i]);
        scanf("%d",&m);
        for(i=1;i<=m;i++)
        {
            cin>>l>>w[i]>>r;
            u[i]=find(l);
            v[i]=find(r);
        }
        memset(d,0,sizeof(d));
        d[1]=20;
        int ok=0;
        for(k=0;k<n;k++)
        {
            for(i=1;i<=m;i++)
            {
                int x=u[i],y=v[i];
                if(d[x]*w[i]>d[y])
                {
                    d[y]=d[x]*w[i];
                }
            }
        }
        for(i=1;i<=m;i++)
        {
                if(ok) break;
                int x=u[i],y=v[i];
                if(d[x]*w[i]>d[y])
                {
                    ok=1;
                }
        }
        if(ok)
            printf("Case %d: Yes\n",casee++);
        else
            printf("Case %d: No\n",casee++);
        getchar();
    }
}
View Code

 

poj 2240 Arbitrage(bellman-ford 判断正环)

标签:

原文地址:http://www.cnblogs.com/sola1994/p/4239916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!