#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <cstring>
#include <list>
#include <queue>
#include <stack>
#include <cmath>
using namespace std;
#define PF(x) (scanf("%d",&x))
#define PT(x,y) (scanf("%d%d",&x,&y))
#define PR(x) (printf("%d\n",x))
#define PRT(x,y)(printf("%d %d\n",x,y))
#define PB(x)(scanf("%I64d",&x))
#define PRB(x)(printf("%I64d\n",(x)))
typedef __int64 LL;
#define N 1005
#define M 105
#define Mod 1000
#define Inf 0x7fffff
int n;
double maps[N][N];
double mins;
double dist[N];
int is[N];
double solve(int s,int t)
{
int cur = s;
memset(is,0,sizeof(is));
for(int i=0;i<n;i++)
dist[i] = 0;
dist[s] = 1;
is[s] = 1;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(dist[j]< dist[cur]*maps[cur][j] && !is[j])
dist[j] = dist[cur]*maps[cur][j];
}
double ma = -1;
int index = -1;
for(int j=0;j<n;j++)
{
if(dist[j]>ma && !is[j])
{
ma = dist[j];
index = j;
}
}
if(index == -1)
return 0;
is[index] = 1;
if(index == t) return dist[index];
cur = index;
}
return 0;
}
void init()
{
while(scanf("%d",&n)==1)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
scanf("%lf",&maps[i][j]);
}
int q;
PF(q);
while(q--)
{
int s,t;
PT(s,t);
s--,t--;
double mins = solve(s,t);
if(mins !=0)
printf("%.3lf\n",mins);
else
puts("What a pity!");
}
}
return ;
}
int main()
{
init();
return 0;
}
hdu 1596
最新推荐文章于 2019-06-29 14:22:34 发布