POJ-2240 -Arbitrage(Bellman)
阿新 • • 發佈:2017-05-15
man problem csdn space 分享 mes amp int char
題目鏈接:Arbitrage
讓這題坑了,精度損失的厲害。用賦值的話。直接所有變成0.00了,無奈下,我僅僅好往裏輸了,和POJ1860一樣找正環,代碼也差點兒相同,略微改改就能夠了,可是這個題精度損失的比那個。
。。。
水過
POJ計劃的最短路模塊,刷完了,最短路問題,挺坑的,可是就是那點東西,變來變去,就是改改dis[]的更新條件。
明天就要開始POJ的最小生成樹了,
ME TI
704Kb 46Ms
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; const int N = 50; const int M = 1010; char a[N][N],s[N]; double dis[N]; int n,m,num; struct node{ int u,v; double w; }edge[M]; int Bellman(int x) { dis[x] = 1.0;//開始時漏了,結果都打NO for(int i = 0;i <n;i++) { for(int j = 0;j < num; j++) { if(dis[edge[j].v] < dis[edge[j].u] * edge[j].w) dis[edge[j].v] = dis[edge[j].u] * edge[j].w; } } for(int i = 0;i<num;i++) { if(dis[edge[i].v] < dis[edge[i].u]*edge[i].w) return 1; } return 0; } int main() { int c; c = 0; while(scanf("%d",&n),n) { c++; for(int i = 0;i <n;i++) dis[i] = 0; for(int i = 0;i <n;i ++) scanf("%s",a[i]); scanf("%d",&m); num = 0; while(m--) { scanf("%s",s); for(int i = 0;i <n;i++) { if(strcmp(s,a[i])== 0) { edge[num].u = i; break; } } scanf("%lf",&edge[num].w); scanf("%s",s); for(int i = 0;i <n;i++) { if(strcmp(s,a[i]) == 0) { edge[num++].v = i; break; } } } int st; for(int i = 0;i<n;i++)//挨個枚舉,找正環 { st = Bellman(i); if(st) break; } printf("Case %d: ",c); if(st) puts("Yes"); else puts("No"); } return 0; }
POJ-2240 -Arbitrage(Bellman)