PKU1860 Currency Exchange

#include<iostream>
#include
<vector>
using namespace std;
const double eps=1e-8;
struct EDGE
{
    
int f,e;
    
double r,c;
}edge[
300];

double d[300];

int main()
{
    
int n,m,s;
    
int i,j,k,t;
    
double rab,cab,rba,cba;
    
double v,_v,c,r;
    scanf(
"%d%d%d%lf",&n,&m,&s,&v);
    
for(i=1;i<=n;++i)
        d[i]
=-1e9;
    d[s]
=v;
    
for(k=0;k<m;++k)
    {
        scanf(
"%d%d%lf%lf%lf%lf",&i,&j,&rab,&cab,&rba,&cba);
        edge[
2*k].f=i;
        edge[
2*k].e=j;
        edge[
2*k].c=cab;
        edge[
2*k].r=rab;
        edge[
2*k+1].f=j;
        edge[
2*k+1].e=i;
        edge[
2*k+1].c=cba;
        edge[
2*k+1].r=rba;
    }
    
while(1)
    {
        
bool tag=true;
        
for(t=0;t<2*m;++t)
        {
            i
=edge[t].f;
            j
=edge[t].e;
            c
=edge[t].c;
            r
=edge[t].r;
            _v
=(d[i]-c)*r;
            
if(_v>0.0&&_v>d[j]+eps)
            {
                d[j]
=_v;
                tag
=false;
            }
        }
        
if(d[s]>v+eps||tag)break;
    }
    
if(d[s]>v+eps)
        printf(
"YES\n");
    
else
        printf(
"NO\n");
    
return 0;
}
posted @ 2009-02-21 00:13  unber  阅读(249)  评论(0)    收藏  举报