POJ1860 SPFA
来源:互联网 发布:知豆电动汽车官网 编辑:程序博客网 时间:2024/06/11 08:42
2017年3月25日 | ljfcnyali
题目大意
给定N种货币,某些货币之间可以相互兑换,现在给定一些兑换规则,问能否从某一种货币开始兑换,经过一些中间货币之后,最后兑换回这种货币,并且得到的钱比之前的多。
Sample Input
3 2 1 20.01 2 1.00 1.00 1.00 1.002 3 1.10 1.00 1.10 1.00
Sample Output
YES
1
YES
题目分析
使用SPFA判断负权环,一个一个乱搞就可以了。
AC代码
/************************************************************************* > File Name: POJ1860.cpp > Author: ljf-cnyali > Mail: ljfcnyali@gmail.com > Created Time: 2017/3/25 15:00:46 ************************************************************************/#include<iostream>#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<algorithm>#include<map>#include<set>#include<vector>#include<queue>using namespace std;#define REP(i, a, b) for(int i = (a), _end_ = (b);i <= _end_; ++ i)#define mem(a) memset((a), 0, sizeof(a))#define str(a) strlen(a)const int maxn = 210;int n, m, S;int begin[maxn], next[maxn], to[maxn], e, vis[maxn], Num[maxn];double V, r[maxn], c[maxn], dist[maxn];void add(int x, int y, double a, double b) { to[++ e] = y; next[e] = begin[x]; begin[x] = e; r[e] = a; c[e] = b;}bool SPFA() { queue<int> Q; vis[S] = 1; dist[S] = V; Q.push(S); Num[S] ++; while(!Q.empty()) { int p = Q.front(); Q.pop(); vis[p] = 0; for(int i = begin[p]; i; i = next[i]) { int q = to[i]; if(dist[q] < (dist[p] - c[i]) * r[i]) { dist[q] = (dist[p] - c[i]) * r[i]; if(!vis[q]) { vis[q] = 1; Q.push(q); Num[q] ++; if(Num[q] > n) return true; } } } } if(dist[S] > V) return true; return false;}int main() {#ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout);#endif int x, y; double r1, c1, r2, c2; while(scanf("%d%d%d%lf", &n, &m, &S, &V) != EOF) { e = 0; mem(begin);mem(next);mem(to);mem(vis);mem(r);mem(c); REP(i, 1, m) { scanf("%d%d%lf%lf%lf%lf", &x, &y, &r1, &c1, &r2, &c2); add(x, y, r1, c1); add(y, x, r2, c2); } if(SPFA()) printf("YES\n"); else printf("NO\n"); } return 0;}
本文转自:http://ljf-cnyali.cn/index.php/archives/111
阅读全文
0 0
- poj1860(spfa)
- spfa && poj1860
- poj1860 spfa
- POJ1860 SPFA
- poj1860 Currency Exchange(spfa)
- poj1860(spfa)
- 【POJ1860】Currency Exchange【spfa判正环】
- poj1860 spfa判断负环
- POJ1860 SPFA判断正环
- poj1860 Currency Exchange(bellman+spfa解法)
- poj1860 货币转换 spfa+Bellman-Ford
- poj1860
- poj1860
- poj1860
- poj1860
- poj1860
- poj1860
- poj1860
- POJ2965 枚举
- python迭代器简介
- 如何取数据五 spring+servlet(request取数据,然后setget dao)+jdbc存数据库
- 2015-2016 ACM-ICPC Pacific Northwest Regional Contest Div.2( Problem V Gears)
- 【Java】-- 对象和对象引用
- POJ1860 SPFA
- 如何用springcloud找妹纸之2--- 相识于江湖(Eureka)
- POJ3259 FLOYD
- 字符串操作函数
- 2017-05-29:Unity5.6连接Sql sever数据库
- C++11右值引用和move语义
- fuzhuo----Problem Description
- 聚族索引和非聚簇索引
- @注解