POJ-1860 Currency Exchange
来源:互联网 发布:冯德伦长相知乎 编辑:程序博客网 时间:2024/06/07 03:11
题目链接:https://vjudge.net/problem/POJ-1860
用Bellman-ford算法来做,本来Bellman-ford可以用来求负权回路,这里反向利用
求正权回路,稍微改动几个地方就可以了
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int N=100+10;struct edge{int a,b;double r,c;edge(){}edge(int aa,int bb,double rr,double cc){a=aa;b=bb;r=rr;c=cc;}}e[2*N];int n,m,s;double v;double d[N];bool BF(){for(int i=1;i<=n;i++) d[i]=0; //初始化由正无穷改为 0 d[s]=v;int l=2*m;for(int i=1;i<n;i++){bool flag=false;for(int j=0;j<l;j++)if(d[e[j].b]<(d[e[j].a]-e[j].c)*e[j].r) //更新为更大值 {d[e[j].b]=(d[e[j].a]-e[j].c)*e[j].r;flag=true;}if(!flag) return false; }for(int j=0;j<l;j++)if(d[e[j].b]<(d[e[j].a]-e[j].c)*e[j].r) //存在正权回路return true;return false;}int main(){scanf("%d%d%d%lf",&n,&m,&s,&v);int a,b;double r,c;for(int i=0;i<m;i++){scanf("%d%d%lf%lf",&a,&b,&r,&c);e[i]=edge(a,b,r,c);scanf("%lf%lf",&r,&c);e[m+i]=edge(b,a,r,c);}if(BF()) printf("YES\n");else printf("NO\n");return 0;}
阅读全文
0 0
- POJ 1860 Currency Exchange
- poj 1860 Currency Exchange
- POJ 1860 Currency Exchange
- Poj 1860 Currency Exchange
- POJ 1860 Currency Exchange
- poj 1860 Currency Exchange
- POJ 1860 Currency Exchange
- poj 1860 Currency Exchange
- POJ 1860 Currency Exchange
- POJ 1860 Currency Exchange
- POJ 1860 Currency Exchange
- poj 1860 Currency Exchange
- POJ 1860 Currency Exchange
- poj 1860 Currency Exchange
- POJ-1860-Currency Exchange
- POJ 1860 Currency Exchange
- poj 1860 Currency Exchange
- POJ 1860 Currency Exchange
- Vue.js 中,7种定义组件模板的方法
- 代码规范
- vmware tools手动安装方法
- git基本整套流程使用
- 第三周周总结
- POJ-1860 Currency Exchange
- java作业11-6
- stackoverflow 上提问/回答习惯 英文
- 自定义异常,实现异常链的功能
- while与do while的区别
- 优化的堆排序
- Metasplotable3 简易安装教程
- 完成一个验证码生成器,要求能够随机生成0~9,a~z,A~Z之间长度为4位的验证码,并完成一个验证过程
- DrawerLayout侧滑菜单的布局,注意事项及代码