【POJ 2240】 Arbitrage

【POJ 2240】Arbitrage

给出n种货币和m种汇率 问经过几次交易后能不能增值 Bellman或者SPFA判断正环即可

主要想吐槽POJ的编译器……G++1A cin用了750ms 险过。。还是关了同步的状态下,。 不用cin也跑了235ms,。。后来用C++ CE……然后测了几次发现是mapCE了……总之试了好多次发现少了string头文件,。cstring头文件在c++编译器下可能少些方法 总之…………写全头文件很重要
这里写图片描述

上代码

#include

using namespace std;

typedef struct Edge
{
    int v,next;
    double w;
}Edge;

Edge eg[999];
int head[33],in[33];
double dis[33];
bool vis[33];
map <string,int> mp;
int n,m;

bool SPFA()
{
    int u,v,i;
    double w;
    memset(vis,0,sizeof(vis));
    memset(in,0,sizeof(in));
    for(i = 1; i <= n; ++i)
        dis[i] = 0;
    dis[1] = 1;
    queue <int> q;
    q.push(1);

    while(!q.empty())
    {
        u = q.front();
        q.pop();
        vis[u] = 0;
        for(i = head[u]; i != -1; i = eg[i].next)
        {
            v = eg[i].v;
            w = eg[i].w;
            if(dis[v] < dis[u]*w)
            {
                dis[v] = dis[u]*w;
                if(!vis[v])
                {
                    in[v]++;
                    if(in[v] == n) return 1;
                    q.push(v);
                    vis[v] = 1;
                }
            }
        }
    }
    return 0;
}

int main()
{
    char to[666],from[666];
    int i,z = 0;

    while(~scanf("%d",&n) && n)
    {
        memset(head,-1,sizeof(head));
        for(i = 1; i <= n; ++i)
        {
            scanf("%s",to);
            mp[to] = i;
        }
        scanf("%d",&m);
        for(i = 0; i < m; ++i)
        {
            scanf("%s %lf %s",from,&eg[i].w,to);
            eg[i].v = mp[to];
            eg[i].next = head[mp[from]];
            head[mp[from]] = i;
        }

        printf("Case %d: %s\n",++z,SPFA()? "Yes": "No");
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值