Bellman-ford算法的反向应用--正循环检查

/** \brief poj 1860 Bellman-Ford
*
* \param date 2014/7/24
* \param state AC
* \return memory 708K time 141ms
*
*/ #include <iostream>
#include <fstream>
#include <cstring> using namespace std; struct RateAndCom
{
//public:
int a;
int b;
double rate;
double Com;
};//Map[MAXN]; const int MAXN=101;
RateAndCom Map[101*2];
double dis[MAXN]; int N;//货币种数
int M;//兑换点数量
int S;//持有第s种货币
double V;//第s种货币本金
int allEdge; bool Bellman_Ford()
{
memset(dis,0,sizeof(dis));
dis[S]=V;
/*relax*/
bool flag;
for(int i=1;i<=N-1;i++)
{
flag=false;
for(int j=0;j<allEdge;j++)
if(dis[Map[j].b] < (dis[Map[j].a]-Map[j].Com)*Map[j].rate)
{
dis[Map[j].b] = (dis[Map[j].a]-Map[j].Com)*Map[j].rate;
flag=true;
}
if(!flag)
break;
} for(int k=0;k<allEdge;k++)
if(dis[Map[k].b] < (dis[Map[k].a]-Map[k].Com)*Map[k].rate)
return true; return false;
} int main()
{
//cout << "Hello world!" << endl;
//freopen("input.txt","r",stdin);
//while(scanf("%d %d %d %f",&N,&M,&S,&V)!=EOF)
while(cin>>N>>M>>S>>V)
{
allEdge=0;
for(int i=0;i<M;i++)
{
int a,b;
double Rab;
double Cab;
double Rba;
double Cba;
//cin>>a>>b>>Map[a][b].rate>>Map[a][b].Commission
//>>Map[b][a].rate>>Map[b][a].Commission;
cin>>a>>b>>Rab>>Cab>>Rba>>Cba;
Map[allEdge].a=a;
Map[allEdge].b=b;
Map[allEdge].rate=Rab;
Map[allEdge].Com=Cab;
allEdge++;
Map[allEdge].a=b;
Map[allEdge].b=a;
Map[allEdge].rate=Rba;
Map[allEdge].Com=Cba;
allEdge++;
}
//Bellman-Ford
if(Bellman_Ford())
cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}

转载请注明出处:http://blog.csdn.net/greenapple_shan/article/details/38307879

最新文章

  1. PHP+ExtJS 文件上传示例
  2. &lt;记录学习&gt;(前三天)京东页面各种注意点
  3. java 28 - 4 JDK5的新特性 之 枚举的概述和自定义枚举类
  4. Android Programming: Pushing the Limits -- Chapter 4: Android User Experience and Interface Design
  5. Azure开发者任务之六:使用WCF Service Web Role
  6. table设置滚动条
  7. VC++读取资源中文件
  8. delphi代码实现创建dump文件
  9. JavaScript 事件总结
  10. 1-hadoop、mr
  11. dataTables的学习笔记 -- 未开启服务器数据模式
  12. spring +servlet 与 spring MVC
  13. js-权威指南学习笔记15
  14. cocos-lua基础学习(九)spite类学习笔记
  15. 052——VUE中使用vue-cli初始化单页面应用
  16. LOJ#2471「九省联考 2018」一双木棋 MinMax博弈+记搜
  17. anisotropic filter
  18. 老司机带你玩Spring.Net -入门篇
  19. Linux中source命令的用法
  20. Linux NAPI/非NAPI

热门文章

  1. Word中将图表变为表格
  2. 网页中输出漂亮格式的Php数组神器
  3. Nokitjs 系列-01 - HelloWorld
  4. Vue-router路由基础总结(二)
  5. java HashMap,LinkedHashMap,TreeMap应用
  6. UVa 164 - String Computer
  7. 从0x00到0xFF的含义以及二进制到10进制的转换(转)
  8. 爪哇国新游记之一----第一个类Cube
  9. C# Meta Programming - Let Your Code Generate Code - Introduction of The Text Template Transformation Toolkit(T4)
  10. 解决安装完Ubuntu系统后启动项中没有Ubuntu的问题