【bellman-Ford判断正权回路】POJ - 1860 Currency Exchange
2017-06-19 11:40
465 查看
Problem Description
输入n,m,s,v,分别代表n中货币类型,m中兑换渠道,自己拥有的货币类型,自己拥有货币价值。接下来m行,每行a,b,rab,cab,rba,cba.分别代表a类型货币,b类型货币,a-b兑换率,a-b手续费,b-a兑换率,b-a手续费。
**思路:判断自己拥有的货币类型出发,回到自己看看有没有正权回路,有就输出YES。
输入n,m,s,v,分别代表n中货币类型,m中兑换渠道,自己拥有的货币类型,自己拥有货币价值。接下来m行,每行a,b,rab,cab,rba,cba.分别代表a类型货币,b类型货币,a-b兑换率,a-b手续费,b-a兑换率,b-a手续费。
**思路:判断自己拥有的货币类型出发,回到自己看看有没有正权回路,有就输出YES。
#include<cstdio> #include<cstring> struct node { int a, b; double rab, cab; }; node e[205]; int n, m, s, cnt; double dist[105]; double v; int bellman_Ford() { memset(dist, 0, sizeof(dist)); dist[s] = v; int i, j; for(i = 0; i < n - 1; i++) { int flag = 0; for(j = 0; j < cnt; j++) { if(dist[e[j].b] < (dist[e[j].a] - e[j].cab) * e[j].rab) { dist[e[j].b] = (dist[e[j].a] - e[j].cab) * e[j].rab; flag = 1; } } if(!flag) break;//如果不更新了退出循环,降低时间复杂度 } //判断是否有正权回路 for(j = 0; j < cnt; j++) { if(dist[e[j].b] < (dist[e[j].a] - e[j].cab) * e[j].rab) return 0;//还能更新,有正权回路 } return 1; } int main() { int a, b; double rab, cab, rba, cba; while(~scanf("%d %d %d %lf", &n, &m, &s, &v)) { cnt = 0; while(m--) { scanf("%d %d %lf %lf %lf %lf", &a, &b, &rab, &cab, &rba, &cba); e[cnt].a = a; e[cnt].b = b; e[cnt].rab = rab; e[cnt++].cab = cab; e[cnt].a = b; e[cnt].b = a; e[cnt].rab = rba; e[cnt++].cab = cba; } if(bellman_Ford()) printf("NO\n"); else printf("YES\n"); } return 0; }
相关文章推荐
- POJ 1860 Currency Exchange Bellman-Ford算法求单源最短路径并判断是否有正权回路
- poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)
- POJ 1860 Currency Exchange(如何Bellman-Ford算法判断图中是否存在正环)
- POJ 3259 Wormholes(判断负权回路|SPFA||Bellman-Ford)
- POJ 1860 Currency Exchange(Bellman-Ford判断最长路是否含有正环)
- [ACM] POJ 3259 Wormholes (bellman-ford最短路径,判断是否存在负权回路)
- poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)
- POJ 1860 Currency Exchange【bellman_ford判断是否有正环——基础入门】
- Bellman_Ford变形求最长路+正权回路或spfa——POJ 1860
- POJ 1860 Currency Exchange【bellman_ford判断是否有正环——基础入门】
- poj1860(Bellman-Ford变形,含负权的单源最短路径,判断是否有正权环)
- poj 1860 (Bellman_Ford判断正环)
- poj 1860 Currency Exchange (bellman-ford 判断正环)
- POJ 3259 Wormholes(bellman_ford,判断有没有负环回路)
- poj 1860 Currency Exchange(Bellman_ford)
- POJ 1860 Currency Exchange (Bellman-Ford)
- POJ 3259 Wormholes【bellman_ford判断负环——基础入门题】
- poj 1860 Currency Exchange :bellman-ford
- poj 1860 Currency Exchange (Bellman_Ford)
- POJ 1860 Currency Exchange(Bellman-Ford最短路径的变形)