POJ-2240 Arbitrage
来源:互联网 发布:网络语666是什么意思 编辑:程序博客网 时间:2024/06/08 05:32
题目链接:https://vjudge.net/problem/POJ-2240
又是一道判断负环的题,这次用spfa做,先用了一般的bfs版的spfa
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<map>using namespace std;const int N=30+2;int n,m;double g[N][N];double d[N];bool vis[N];bool spfa(){int cnt[N];for(int i=0;i<n;i++)d[i]=0.0;memset(vis,false,sizeof(vis));memset(cnt,0,sizeof(cnt));d[0]=100;vis[0]=true;cnt[0]=1;queue<int> q;q.push(0);while(!q.empty()){int u=q.front();vis[u]=false;q.pop();for(int i=0;i<n;i++)if(d[i]<d[u]*g[u][i]){d[i]=d[u]*g[u][i];if(!vis[i]){cnt[i]++;if(cnt[i]>=n) return true;q.push(i);}vis[i]=true;}}return false;}int main(){int kase=0;while(~scanf("%d",&n)&&n){map<string,int> mm;string a,b;double c;for(int i=0;i<n;i++){cin>>a;mm[a]=i;}for(int i=0;i<n;i++)for(int j=0;j<n;j++)g[i][j]=0.0;scanf("%d",&m);for(int i=0;i<m;i++){cin>>a>>c>>b;g[mm[a]][mm[b]]=c;}printf("Case %d: ",++kase);if(spfa()) printf("Yes\n");else printf("No\n");}return 0;}
然后听说dfs优化的spfa判断负环更好些,结果是对这道题来说时间差不多
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>#include<map>using namespace std;const int N=30+2;int n,m;double g[N][N];double d[N];bool vis[N],flag;void spfa(int u){if(flag) return;for(int i=0;i<n;i++)if(d[i]<d[u]*g[u][i]){if(vis[i]){flag=true;return;}else{d[i]=d[u]*g[u][i];vis[i]=true;spfa(i);vis[i]=false;}}}int main(){int kase=0;while(~scanf("%d",&n)&&n){map<string,int> mm;string a,b;double c;for(int i=0;i<n;i++){cin>>a;mm[a]=i;}for(int i=0;i<n;i++)for(int j=0;j<n;j++)g[i][j]=0.0;scanf("%d",&m);for(int i=0;i<m;i++){cin>>a>>c>>b;g[mm[a]][mm[b]]=c;}for(int i=0;i<n;i++)d[i]=0.0;d[0]=100;memset(vis,false,sizeof(vis));vis[0]=true;flag=false;spfa(0);printf("Case %d: ",++kase);if(flag) printf("Yes\n");else printf("No\n");}return 0;}
阅读全文
0 0
- 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
- POJ-2240-Arbitrage
- poj 2240 Arbitrage
- tomcat 报错
- php怎么杀死后台进程
- c++ 静态
- Tensorflow常用基本概念与函数(二)
- Retrofit2.0通俗易懂的学习姿势,Retrofit2.0 + OkHttp3 + Gson + RxJava
- POJ-2240 Arbitrage
- SQL更新多行数据为不同的值如何实现?
- hello world
- ORACLE 查看RMAN的备份信息总结
- 解决Installation failed with message INSTALL_FAILED_NO_MATCHING_ABIS
- Golang json解析
- SparkSql读取数据和插入数据
- 人工智能与前端技术不能说的秘密
- mysql_replace into