【Bellman_Ford】poj 1860 Currency Exchange

来源:互联网 发布:求购信息搜索软件 编辑:程序博客网 时间:2024/06/05 19:16

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

题意:A和B交换率相等(双向图),每次交换需要小费(可以交换多次),问经过一系列交换后(最后需要换回最开始的那种货币),资金能否增长?

分析:寻找正权回路


#include <iostream>#include <cstdio>#include <map>#include <cstring>#include <string>using namespace std;const int NM=105;double dis[NM];int n,m;struct Node{int x,y;double r,c;}q[NM<<1];bool Bellman_Ford(int s,double v){int i,j;memset(dis,0,sizeof(dis));dis[s]=v;for(i=0;i<n;i++){for(j=0;j<2*m;j++){if(dis[q[j].y]<(dis[q[j].x]-q[j].c)*q[j].r)dis[q[j].y]=(dis[q[j].x]-q[j].c)*q[j].r;}}for(j=0;j<2*m;j++){if(dis[q[j].y]<(dis[q[j].x]-q[j].c)*q[j].r)return true;}return false;}int main(){int s,i;double v;while(~scanf("%d%d%d%lf",&n,&m,&s,&v)){for(i=0;i<m;i++){scanf("%d%d%lf%lf%lf%lf",&q[i].x,&q[i].y,&q[i].r,&q[i].c,&q[i+m].r,&q[i+m].c);q[i+m].x=q[i].y;q[i+m].y=q[i].x;}if(Bellman_Ford(s,v)) printf("YES\n");else printf("NO\n");}return 0;}


0 0
原创粉丝点击