poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)
来源:互联网 发布:数据港千股千评 编辑:程序博客网 时间:2024/05/16 03:20
链接:poj 1860
题意:给定n中货币,以及它们之间的税率,A货币转化为B货币的公式为 B=(V-Cab)*Rab,其中V为A的货币量,
求货币S通过若干此转换,再转换为原本的货币时是否会增加
分析:这个题就是判断是否存在正权回路,可以用bellman-ford算法,不过松弛条件相反
也可以用SPFA算法,判断经过转换后,转换为原本货币的值是否比原值大、、、
bellman-ford 0MS
#include<stdio.h>#include<string.h>struct stu{ int a,b; double r,c;}edge[205];double v,dis[105];int s;int bellmanford(int n,int m){ int i,j,flag=0; memset(dis,0,sizeof(dis)); dis[s]=v; for(i=1;i<=n-1;i++) for(j=1;j<=m;j++) if(dis[edge[j].a]&&(dis[edge[j].a]-edge[j].c)*edge[j].r>dis[edge[j].b]) dis[edge[j].b]=(dis[edge[j].a]-edge[j].c)*edge[j].r; for(j=1;j<=m;j++) if(dis[edge[j].a]&&(dis[edge[j].a]-edge[j].c)*edge[j].r>dis[edge[j].b]){ flag=1; break; } return flag;}int main(){ int i,j,l,r,n,m,flag; while(scanf("%d%d%d%lf",&n,&m,&s,&v)!=EOF){ j=1; for(i=1;i<=m;i++){ scanf("%d%d",&l,&r); scanf("%lf%lf",&edge[j].r,&edge[j].c); edge[j].a=l; edge[j].b=r; j++; edge[j].a=r; edge[j].b=l; scanf("%lf%lf",&edge[j].r,&edge[j].c); j++; } flag=bellmanford(n,2*m); if(flag) printf("YES\n"); else printf("NO\n"); } return 0;}
SPFA+邻接表 16MS
#include<cstdio>#include<cstring>#include<queue>using namespace std;struct stu{ int a,b; double r,c;}edge[205];double v,dis[105];int s,first[205],next[205],vis[105];int SPFA(int n,int m){ int i,pos; queue<int> q; memset(dis,0,sizeof(dis)); memset(vis,0,sizeof(vis)); dis[s]=v; q.push(s); vis[s]=1; while(!q.empty()){ pos=q.front(); q.pop(); vis[pos]=0; i=first[pos]; while(i!=-1){ if((dis[pos]-edge[i].c)*edge[i].r>dis[edge[i].b]){ dis[edge[i].b]=(dis[pos]-edge[i].c)*edge[i].r; if(!vis[edge[i].b]){ q.push(edge[i].b); vis[edge[i].b]=1; } } i=next[i]; } if(dis[s]>v) return 1; } return 0;}int main(){ int i,j,l,r,n,m,flag; while(scanf("%d%d%d%lf",&n,&m,&s,&v)!=EOF){ j=1; for(i=1;i<=m;i++){ scanf("%d%d",&l,&r); scanf("%lf%lf",&edge[j].r,&edge[j].c); edge[j].a=l; edge[j].b=r; j++; edge[j].a=r; edge[j].b=l; scanf("%lf%lf",&edge[j].r,&edge[j].c); j++; } memset(first,-1,sizeof(first)); for(i=1;i<=2*m;i++){ next[i]=first[edge[i].a]; first[edge[i].a]=i; } flag=SPFA(n,2*m); if(flag) printf("YES\n"); else printf("NO\n"); } return 0;}
4 0
- poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)
- poj 1860 Currency Exchange (spfa或Bellman-Ford)
- POJ 1860 Currency Exchange(Bellman-Ford)
- POJ 1860 Currency Exchange(Bellman-Ford)
- POJ-1860 Currency Exchange(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 Currency Exchange(bellman-ford)
- Bellman-Ford-POJ-1860-Currency Exchange
- poj 1860 Currency Exchange 【bellman-ford】
- poj 1860 Currency Exchange (Bellman- Ford)
- poj 1860 Currency Exchange(bellman-ford)
- 图论 --- spfa + 链式向前星 : 判断是否存在正权回路 poj 1860 : Currency Exchange
- poj 1860 Currency Exchange(Bellman-Ford 改)
- Currency Exchange (Bellman-Ford算法,判断是否有正权回路)
- 温习最短路1
- 绝对想不到 新iPhone预计将影响亚洲经济
- 3D数学基础图形与游戏开发之 坐标系
- tcp为什么要三次握手,而不能二次握手?
- SQL A表数据更新到B表
- poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)
- 用C/C++实现对STORM的运行信息查看和控制
- 介绍一个垂直滚动的jQuery插件,vTicker
- 我的就错误杭电2024,再议吧
- Java NIO SocketChannel
- poj 1088 滑雪
- 模仿百度搜索的自动提示功能 高大上
- 一行命令搞定node.js升级
- Adobe Photoshop脚本自动化技术