POJ 2240.Arbitrage
来源:互联网 发布:贵州广电网络网上缴费 编辑:程序博客网 时间:2024/06/08 17:41
题目:http://poj.org/problem?id=2240
AC代码(C++):
#include <iostream>#include <algorithm>#include <stdio.h>#include <vector>#include <queue>#include <math.h>#include <string>#include <string.h>#include <bitset>#define INF 0xfffffff#define MAXN 105using namespace std;int n;vector<int> map[50];double rate[50][50];bool vis[50];int cnt[50];double num[50];int Case = 0;bool SPFA(int start){ memset(vis,0,sizeof(vis)); memset(cnt,0,sizeof(cnt)); memset(num,0,sizeof(num)); queue<int> Q; Q.push(start); vis[start]=1; num[start]=1.0; cnt[start]++; while(!Q.empty()){ int tp=Q.front(); Q.pop(); vis[tp]=0; if(cnt[tp]>n){ return true; } for(vector<int>::iterator it = map[tp].begin(); it != map[tp].end(); it++){ int to = *it; double t=num[tp]*rate[tp][to]; if(t-num[to]<1e-10)continue; num[to]=t; if(!vis[to])vis[to]=1,Q.push(to),cnt[to]++; } } return false;}int main(){while(cin>>n){if(n==0)break;Case++;for(int i = 0; i < n; i++)map[i].clear();string cur[50];for(int i = 0; i < n; i++){cin>>cur[i];}int m;cin>>m;for(int i = 0; i < m; i++){string a,b;int ai=0,bi=0;double tmpr;cin>>a>>tmpr>>b;for(;ai<n;ai++)if(cur[ai].compare(a)==0)break;for(;bi<n;bi++)if(cur[bi].compare(b)==0)break;map[ai].push_back(bi);rate[ai][bi] = tmpr;}bool ans = false;for(int i = 0; i < n; i++)if(SPFA(i)==true){ans = true;break;}cout<<"Case "<<Case<<": ";if(ans)cout<<"Yes\n";else cout<<"No\n";}}总结: 典型的找负环. 首先想到用SPFA. 不过一开始莫名WA了好几次, 最后把map从邻接矩阵的表示改成邻接表就AC了...可能是测试用例中有一些重复边或无用边.
阅读全文
0 0
- POJ 2240.Arbitrage
- Arbitrage POJ
- POJ 2240 Arbitrage
- poj 2240 Arbitrage
- POJ 2240 Arbitrage (Floyd)
- poj 2240Arbitrage(Floyd)
- POJ 2240 Arbitrage Floyd
- Poj 2240 Arbitrage
- POJ 2240 Arbitrage
- poj 2240 Arbitrage
- POJ 2240 Arbitrage (spfa)
- POJ 2240 Arbitrage
- POJ 2240 Arbitrage
- Poj 2240 Arbitrage
- POJ 2240 Arbitrage
- POJ 2240 Arbitrage
- POJ 2240 Arbitrage
- POJ 2240 Arbitrage
- maven全局配置文件settings.xml详解
- Swift3.0:Get/Post同步和异步请求
- Gradle命令和配置
- MVC5记
- ruby 循环
- POJ 2240.Arbitrage
- swagger注解说明
- TestNG以程序的方式运行,制作可运行的jar包
- linux常用命令
- rabbitmq集群部署及配置
- 微信小程序开发(2)---APP()函数
- JMeter入门教程
- GKSpheresNoiseSource
- iOS下日志记录