2240Arbitrage——poj

这道题看见的时候以为只用一次Floyd(统一一个货币的价值为1)  没想到熊哥告诉我可以有交换不出去的货币。。。QAQ

就义无反顾wa了 


这么良心的数据 n<=30
不Floyd 跟待何时

不过由于有些货币不连通  不能单独统一一种货币进行Floyd

所以n次Floyd
n^4   由于良心的范围  不会tle

就放心干吧、、

一句话  暴力。。。


#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
double a[40][40],dis[40][40];
struct Money
{
	char name[50];	
	bool operator == (const Money &qwe)const
		{
			Money x = *this;
			int len1 = strlen(x.name) - 1;
			int len2 = strlen(qwe.name) - 1;
			if(len1 != len2)
				return false;
			for(int i = 0;i <= len1;i++)
				if(x.name[i] != qwe.name[i])
				return false;
			return true;			
		}
}money[40],s1,s2;
int n,m,bz,xh;
void readdata()
{
	scanf("%d",&n);
	if(n==0)
		exit(0);
	bz=0;
	xh++;
	memset(a,0,sizeof(a));
	for(int i = 1;i <= n;i++)
		{
			memset(money[i].name,0,sizeof(money[i].name));
			scanf("%s",&money[i].name);
		}
	scanf("%d",&m);
	for(int i = 1;i <= m;i++)
		{
			int u = 0;
			int v = 0;			
			double w = 0;
			memset(s1.name,0,sizeof(s1.name));
			memset(s2.name,0,sizeof(s2.name));
			scanf("%s %lf %s",&s1.name,&w,&s2.name);
			for(int j = 1;j <= m;j++)
				{
					if(money[j] == s1)
						u = j;
					if(money[j] == s2)
						v = j;
					if(u * v != 0)
					break;
				}
			a[u][v] = w;			
		}	
}
int main()
{
	while(1)
		{
			readdata();
			for(int l = 1;l <= n; l++)
			{
				memset(dis,0,sizeof(dis));
				dis[l][l] = 1;
				for(int i = 1;i <= n;i++)
					for(int j = 1;j <= n ;j++)
						dis[i][j] = a[i][j];
				for(int k = 1 ;k <= n ;k++)
					for(int i = 1;i <= n;i++)
						for(int j = 1;j <= n;j++)
							{
								if(dis[i][k]*dis[k][j]>dis[i][j])
								dis[i][j]=dis[i][k]*dis[k][j];
							}
				if(dis[l][l]>1)
				{
					bz=1;
					printf("Case %d: Yes\n",xh);
					break;
				}
			}
			if(bz==0)
			printf("Case %d: No\n",xh);
		}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值