• poj1860 Currency Exchange **


    /*
    * 汇率问题: Bellman_Ford算法 , 判断正环
    *
    * 有个奇怪的问题: 如果把 d[i]初始化为 -inf 则 WA, 初始化为 0 或 -100 之类的值则AC~ 奇怪
    */
    #include
    <iostream>
    #include
    <cstring>
    using namespace std;

    const int maxN = 100 + 5;
    int n, m, s;
    double v, r[maxN][maxN], c[maxN][maxN], d[maxN];

    void ini(){
    for(int i=1; i<=n; i++)
    d[i]
    = 0;
    d[s]
    = v;
    }
    /*
    bool relax(int lhs, int rhs){
    double tmp = (d[lhs] - c[lhs][rhs]) * r[lhs][rhs];

    if(tmp >= eps && d[rhs] < tmp + eps){
    d[rhs] = tmp;
    return 1;
    }
    return 0;
    }
    */
    bool Bellman_Ford(){
    ini();

    bool flag;
    for(int i=1; i<=n; i++){
    flag
    = 0;
    for(int j=1; j<=n; j++){
    for(int k=1; k<=n; k++){
    if(r[j][k] >= 0)
    if(d[k] < (d[j] - c[j][k]) * r[j][k]){
    d[k]
    = (d[j] - c[j][k]) * r[j][k];
    flag
    = 1;
    }
    }
    }
    if(!flag) break; //没有边能继续松弛
    }

    //判断正环
    for(int j=1; j<=n; j++){
    for(int k=1; k<=n; k++){
    if(r[j][k] >= 0 && d[k] < (d[j] - c[j][k]) * r[j][k]){
    return 1;
    }
    }
    }
    return 0;

    }


    int main(){
    while(cin >> n >> m >> s >> v){
    for(int i=0; i<=n; i++)
    for(int j=0; j<=n; j++)
    r[i][j]
    = -1;


    int a, b;
    for(int i=1; i<=m; i++){
    cin
    >> a >>b;
    cin
    >> r[a][b] >> c[a][b] >> r[b][a] >> c[b][a];
    }

    if(Bellman_Ford())
    cout
    << "YES" << endl;
    else
    cout
    << "NO" << endl;
    }

    return 0;
    }
  • 相关阅读:
    php 三元运算符简洁用法
    Linux 获取网卡信息
    《构建之法》读后感
    毫秒数据字符串转换为DateTime
    POST请求——HttpWebRequest
    多个不同类对象传输思路
    WCF 大文件传输配置
    WCF配置文件详解
    C# 元组、匿名对象、ref&out
    C#控制台关闭之前做一些操作
  • 原文地址:https://www.cnblogs.com/longdouhzt/p/2164405.html
Copyright © 2020-2023  润新知