Currency Exchange--POJ 1860

1、题目类型:图论、最短路径、Bellman-Ford算法。

2、解题思路:Bellman-Ford算法简单应用。

3、注意事项:更新条件:d[j]<(d[i]-com[i][j])*rate[i][j]。

4、实现方法:

#include<iostream>
using namespace std;
#define Max 110
#define INF 99999999.9

int n,m,s,flag;
double v;
double rate[Max][Max],com[Max][Max];

void Bellman_ford()
{
int i,j,k;
double d[Max];
for (i=0;i<n;i++)
d[i]
=-INF;
s
--;
d[s]
=v;
for (k=1;k<n;k++)
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (d[j]<(d[i]-com[i][j])*rate[i][j])
d[j]
=(d[i]-com[i][j])*rate[i][j];

flag
=0;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
if (d[j]<(d[i]-com[i][j])*rate[i][j])
{
flag
=1;
return;
}

if(d[s]>v)
flag
=1;
}

int main()
{
int i,tmp1,tmp2;
cin
>>n>>m>>s>>v;
for(i=0;i<m;i++)
{
cin
>>tmp1>>tmp2;
tmp1
--,tmp2--;
cin
>>rate[tmp1][tmp2]>>com[tmp1][tmp2];
cin
>>rate[tmp2][tmp1]>>com[tmp2][tmp1];
}
Bellman_ford();
if(flag)
cout
<<"YES"<<endl;
else
cout
<<"NO"<<endl;
return 1;
}

 

posted @ 2010-08-11 16:51  勇泽  阅读(212)  评论(0编辑  收藏  举报