ZOJ Problem Set - 1544 Currency Exchange

#include <iostream>
#include <cstring>
#define eps 1e-8
#define M 100000
using namespace std;
struct vertex
{
      double r;
      double c;
      int u;
      int v;
}ver[10000];
int k,n;
double node[110],v;
bool BF(int s)
{
      int i,j;
      //cout<<n<<endl;
      for(i = 0;i < n;i ++)
      {
            for(j = 0;j < k;j ++)
            {
                  //cout<<node[ver[j].v]<< (node[ver[j].u] - ver[j].c) * ver[j].r<<endl;;
                  if(node[ver[j].v] < (node[ver[j].u] - ver[j].c) * ver[j].r)
                  {
                        node[ver[j].v] = (node[ver[j].u] - ver[j].c) * ver[j].r;
                  }
            }
      }
      if(node[s] > v) return 1;
      for(j = 0;j < k;j ++)
      {
      if(node[ver[j].v]+eps< (node[ver[j].u] - ver[j].c) * ver[j].r)
              return 1;

      }
      return 0;
}
int main()
{
      int m,s,i,j,l,r;
      double rab,cab,rba,cba;
      while(cin>>n>>m>>s>>v)
      {
            k = 0;
            for(i = 0;i < m;i ++){
            cin>>l>>r>>rab>>cab>>rba>>cba;
            ver[k].u = l;ver[k].v = r;
            ver[k].r = rab;ver[k].c = cab;
            k++;
            ver[k].u = r;ver[k].v = l;
            ver[k].r = rba;ver[k].c = cba;
            k++;
            }

            for(i = 0;i <= n;i ++)
            node[i] = 0;
            node[s] = v;
            if(BF(s) == 1) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
            //for(i = 0;i <= n;i ++)cout<<node[i]<<endl;
      }


     return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值