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;
}
#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;
}

浙公网安备 33010602011771号