Description
As they are on a mission from God, you should help them find the safest way to Chicago. In this problem, the safest way is considered to be the route which maximises the probability that they are not caught.
Input
Each test case starts with two integers n and m (2 <= n <= 100 , 1 <= m <= n*(n-1)/2). n is the number of intersections, m is the number of streets to be considered.
The next m lines contain the description of the streets. Each street is described by a line containing 3 integers a, b and p (1 <= a, b <= n , a != b, 1 <= p <= 100): a and b are the two end points of the street and p is the probability in percent that the Blues Brothers will manage to use this street without being caught. Each street can be used in both directions. You may assume that there is at most one street between two end points.
The last test case is followed by a zero.
Output
Print the probability as a percentage with exactly 6 digits after the decimal point. The percentage value is considered correct if it differs by at most 10-6 from the judge output. Adhere to the format shown below and print one line for each test case.
Sample Input
5 7 5 2 100 3 5 80 2 3 70 2 1 50 3 4 90 4 1 85 3 1 70 0
Sample Output
61.200000 percent
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
int n,m;
double a[110][110];
int main()
{
while(scanf("%d",&n)==1&&n)
{
scanf("%d",&m);
memset(a,0,sizeof(a));
for(int i=0;i<m;i++)
{
int x,y;double p;
scanf("%d%d%lf",&x,&y,&p);
a[x][y]=a[y][x]=p/100;
}
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
a[i][j]=max(a[i][j],a[i][k]*a[k][j]);
}
}
}
printf("%.6lf percent\n",a[1][n]*100);
}
return 0;
}
本文介绍了一个算法问题,即如何在被多方追捕的情况下从A点到达B点,并确保最高概率不被捕。通过构建图模型并使用动态规划算法,文章详细解释了如何找到这一最安全路径。
196

被折叠的 条评论
为什么被折叠?



