偷懒了,哈哈

Problem G

Time Limit : 6000/2000ms (Java/Other)   Memory Limit : 65535/16384K (Java/Other)
Total Submission(s) : 56   Accepted Submission(s) : 19
Font: Times New Roman | Verdana | Georgia

Problem Description

“…黑黑的天空低垂/亮亮的繁星相随/虫儿飞虫儿飞/你在思念谁…”

I don’t know whether you could recall this soft song in your memory, but every time I listened to it, I thought about you. Shall it be several years since last time we met each other? I had given up every chance that I could tell you what I wanted you know. I think I was absolutely ridiculous.

We had lost contact with each other since that summer, I cannot remember how many times I wanted to make you a call and at last turned down the idea, I was such a coward that I even didn’t know how to start a conversation. I did not even know where you were! How can I be such a timid person?

Give thanks to god. Few days ago I finally heard about your recentness from one of my old classmates, and contact with you again! Though we’re thousands of miles away, I can be no more satisfied to chat with you. However, I know I may never have the courage to tell you what I am thinking, I hope I won’t disturb you too much. If only I am a firefly, I could fly near where you are. Even when your entire world has turned black, I always will be the light in the dark night.

Now here’s the problem, how tough will it be for a little firefly to cross thousands of miles to reach the destination? What is the possibility to survive? To make the problem simple, let’s consider the world as an undirected graph. The cities are vertexes. Little firefly can only fly from one city to another. However, a firefly is too small and too weak; it could easily be hurt on the way between two cities. Now I have the number of cities, the possibility being attacked between each pair of cities, the start city and the destination city, I want to know what the maximum possibility for the little bug to survive is. You know, one attack is deadly enough.

Input

The input file consists several test cases, each cases start with an integer N (2<=N<=300), which means the count of cities; the second line of the input is two integer S, D (1<=S, D<=N), S is the number of start city; D is the number of destination city. The cities are indexed from 1 to N. The next N lines, each line contains N non-negative real number that not larger than 1.The i-th input of the j+2-th line means the possibility being attacked on the way from City j to City i. End of file indicates the end of the input.

Output

For each test case, output one line with a real number which represents the maximum possibility. The answer should be rounded to forth digit after the decimal point.

Sample Input

2
1 2
0.0 0.01
0.01 0.0

Sample Output

0.9900



HINT
Huge input, use scanf to read data.
我本想用Dijkstra的,但是看到又2000MS呢,数据规模又小于是就碰碰运气,用了Floyd,没想到过了!!汗了
#include<iostream>
using namespace std;
double map[301][301];
int n,s,e;
void solve()
{
  for(int k=1;k<=n;k++)
   for(int i=1;i<=n;i++)
    for(int j=1;j<=n;j++)
    {
     if(map[i][j]<map[i][k]*map[k][j])
        map[i][j]=map[i][k]*map[k][j]; 
     }
   printf("%.4lf/n",map[s][e]);   
   
}
int main()
{
  double t;
  while(scanf("%d",&n)!=EOF)
   {
     scanf("%d %d",&s,&e);
     for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
      {  
       scanf("%lf",&t);
       map[i][j]=1-t;
      }
      solve();                       
   }  
   return 0;  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值