poj 2240 Arbitrage (最短路 bellman_ford)

题目:http://poj.org/problem?id=2240

题意:给定n个货币名称,给m个货币之间的汇率,求会不会增加

和1860差不多,求有没有正环

刚开始没对,不知道为什么用 double往结构体里传值的时候 会去掉小数点后的 数

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<stack>
#include<queue>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<map>
using namespace std; struct node
{
int u,v;
double w;
}edge[];
int cnt,n;
double dis[]; bool bellman_ford(int s)
{
int i,j;
memset(dis,,sizeof(dis));
dis[s] = ; for(i=; i<n-; i++)
for(j=; j<cnt; j++)
{
int u=edge[j].u;
int v=edge[j].v;
double w=edge[j].w;
if(dis[v]<dis[u]*w)
dis[v]=dis[u]*w;
}
for(j=; j<cnt; j++)
{
int u=edge[j].u;
int v=edge[j].v;
double w=edge[j].w;
if(dis[v]<dis[u]*w)
return true;
}
return false;
}
int main()
{
map<string,int>mp;
char s[],s2[],x=;
int m,i,j;
while(cin>>n&&n)
{
cnt=;
for(i=; i<n; i++)
{
cin>>s;
mp[s]=i;
}
cin>>m;
for(i=; i<=m; i++)
{
cin>>s; scanf("%lf",&edge[cnt].w); cin>>s2;
edge[cnt].u=mp[s]; edge[cnt].v=mp[s2];
cnt++;
} if(bellman_ford()) printf("Case %d: Yes\n",x++);
else printf("Case %d: No\n",x++);
}
return ;
}
上一篇:c# & Fizzler to crawl web page in a certain website domain


下一篇:总结Linux下查看流量工具