POJ 1860 Currency Exchange(Bellman-Ford)
2014-04-10 20:05
411 查看
题意 : 有关汇率的问题,汇率rab,增加了一个手续费 cab 每次的结果是 (本金 - 手续费) * 汇率,而且一个人拥有的钱的类型是已知的,拥有的value 钱的个数也是已知的, 问你能不能增值。
思路: 在Bellonman原本的实现过程中,是寻找最短路,判断负环。这一题恰好相反,需寻找最长路,判断有无无限松弛的正环
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string.h>
using namespace std;
int n;
int m;
int s;
double v;
int sum;
double dis[110];
struct huilv
{
int a;
int b;
double r;
double c;
}hui[220];
int bellman()
{
memset(dis,0,sizeof(dis));
dis[s] = v;
int flag;
for(int i = 1;i < n; i++)
{
flag = 0;
for(int j = 0;j < sum; j++)
if(dis[hui[j].b] < (dis[hui[j].a] - hui[j].c) * hui[j].r)
{
dis[hui[j].b] = (dis[hui[j].a] - hui[j].c) * hui[j].r;
flag = 1;
}
if(!flag)
break;
}
for(int i = 0;i < sum; i++)
if(dis[hui[i].b] < (dis[hui[i].a] - hui[i].c) * hui[i].r)
return 1;
return 0;
}
int main()
{
int a,b;
double rab,cab,rba,cba;
while(cin>>n>>m>>s>>v)
{
sum = 0;
for(int i = 0;i < m;i++)
{
cin>>a>>b>>rab>>cab>>rba>>cba;
hui[sum].a = a;
hui[sum].b = b;
hui[sum].r = rab;
hui[sum++].c = cab;
hui[sum].a = b;
hui[sum].b = a;
hui[sum].r = rba;
hui[sum++].c = cba;
}
if(bellman())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
思路: 在Bellonman原本的实现过程中,是寻找最短路,判断负环。这一题恰好相反,需寻找最长路,判断有无无限松弛的正环
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string.h>
using namespace std;
int n;
int m;
int s;
double v;
int sum;
double dis[110];
struct huilv
{
int a;
int b;
double r;
double c;
}hui[220];
int bellman()
{
memset(dis,0,sizeof(dis));
dis[s] = v;
int flag;
for(int i = 1;i < n; i++)
{
flag = 0;
for(int j = 0;j < sum; j++)
if(dis[hui[j].b] < (dis[hui[j].a] - hui[j].c) * hui[j].r)
{
dis[hui[j].b] = (dis[hui[j].a] - hui[j].c) * hui[j].r;
flag = 1;
}
if(!flag)
break;
}
for(int i = 0;i < sum; i++)
if(dis[hui[i].b] < (dis[hui[i].a] - hui[i].c) * hui[i].r)
return 1;
return 0;
}
int main()
{
int a,b;
double rab,cab,rba,cba;
while(cin>>n>>m>>s>>v)
{
sum = 0;
for(int i = 0;i < m;i++)
{
cin>>a>>b>>rab>>cab>>rba>>cba;
hui[sum].a = a;
hui[sum].b = b;
hui[sum].r = rab;
hui[sum++].c = cab;
hui[sum].a = b;
hui[sum].b = a;
hui[sum].r = rba;
hui[sum++].c = cba;
}
if(bellman())
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
相关文章推荐
- POJ 1860 Currency Exchange [bellman_ford]
- POJ 1860 Currency Exchange Bellman-Ford
- poj 1860 Currency Exchange (Bellman_Ford)
- poj 1860 Currency Exchange 【bellman-ford】
- POJ - 1860 Bellman-Ford判正环
- POJ1860 Currency Exchange 最短路bellman-ford
- poj1860 Currency Exchange --- Bellman-Ford
- POJ 1860 Currency Exchange(Bellman-Ford)
- Poj 1860 Currency Exchange(Bellman-Ford,SPFA解单源最短路径问题)
- poj 1860 Currency Exchange (Bellman_Ford)
- POJ1860 Currency Exchange(Bellman-ford的变形)
- poj 1860 Currency Exchange(bellman-ford)
- POJ 1860 Bellman_Ford
- Poj 1860 Currency Exchange(Bellman-Ford,SPFA解单源最短路径问题)
- poj 1860 Currency Exchange(bellman-ford)
- POJ 1860 Currency Exchange 贝尔曼-福特算法(Bellman-Ford)
- poj 1860 Currency Exchange Bellman-Ford 求正环
- poj 1860 Currency Exchange :bellman-ford
- POJ 1860 Bellman_Ford
- poj 3259 虫洞 & poj 1860 货币兑换 bellman-ford解法