POJ1860-Currency Exchange

http://poj.org/problem?id=1860

好像当初百度了一下来着- -#

#include<stdio.h>
#include<string.h>
int N,M,S,cnt;
double V;
struct edge
{
    int u,v;
    double r,c;
}E[201];
int bellman()
{
    int i, f;
    double d[110];
    memset(d,0,sizeof(d));
    d[S]=V;
    while(d[S]<=V)
    {
        f=0;
        for(i=0;i<cnt;i++)
        {
            if(d[E[i].v]<(d[E[i].u]-E[i].c)*E[i].r)
            {
                d[E[i].v]=(d[E[i].u]-E[i].c)*E[i].r;
                f=1;
            }
        }
        if(!f) 
           return d[S]>V;
    }
    return 1;
}
int main(void)
{
    int a,b,i;
    double rab,cab,rba,cba;
    scanf("%d%d%d%lf",&N,&M,&S,&V);
    cnt=0;
    for(i=0;i<M;i++)
    {
        scanf("%d%d",&a,&b);
        scanf("%lf%lf%lf%lf",&rab,&cab,&rba,&cba);
        E[cnt].u=a; 
        E[cnt].v=b;
        E[cnt].r=rab; 
        E[cnt].c=cab;
        cnt++;
        E[cnt].u=b; 
        E[cnt].v=a;
        E[cnt].r=rba; 
        E[cnt].c=cba;
        cnt++;
    }
    if(bellman()) 
       printf("YES\n");
    else 
       printf("NO\n");
    return 0;
}
posted @ 2012-08-30 18:19  Yogurt Shen  阅读(132)  评论(0编辑  收藏  举报