Arbitrage

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

 1 #include<cstdio>

 2 #include<cstring>

 3 #include<algorithm>

 4 #define MAXN 100

 5 const int INF=1<<28;

 6 using namespace std;

 7 double dis[MAXN][MAXN];

 8 char s[MAXN][MAXN];

 9 char s1[MAXN],s2[MAXN];

10 int n,t;

11 double r;

12 int main()

13 {

14     int tt=0;

15     while(scanf("%d",&n)&&n){\

16        memset(dis,INF,sizeof(dis));

17          tt++;

18        for(int i=0;i<n;i++)

19        {

20            scanf("%s",s[i]);

21            dis[i][i]=1;

22        }

23        scanf("%d",&t);

24        for(int j=0;j<t;j++)

25        {

26          scanf("%s %lf %s",s1,&r,s2);

27          int a,b;

28          for(int i=0;i<n;i++)

29          {

30              if(!strcmp(s[i],s1))

31              {

32                  a=i;

33                  break;

34              }

35          }

36          for(int j=0;j<n;j++)

37          {

38              if(!strcmp(s[j],s2))

39              {

40                  b=j;

41                  break;

42              }

43          }

44          dis[a][b]=r;

45        }

46        for(int k=0;k<n;k++)

47        {

48            for(int i=0;i<n;i++)

49            {

50                for(int j=0;j<n;j++)

51                {

52                    if(dis[i][j]<dis[i][k]*dis[k][j])

53                    {

54                        dis[i][j]=dis[i][k]*dis[k][j];

55                    }

56                }

57            }

58        }

59        int flag=0;

60        for(int i=0;i<n;i++)

61        {

62           if(dis[i][i]>1.0)

63           {

64               flag=1;

65               break;

66           }

67        }

68        if(flag) printf("Case %d: Yes\n",tt);

69        else printf("Case %d: No\n",tt);

70 

71     }

72     return 0;

73 }
View Code

 

你可能感兴趣的:(bit)