您的位置:首页 > 编程语言 > Go语言

poj 2472 106 miles to Chicago

2014-09-24 18:50 441 查看
106 miles to Chicago

Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 4127 Accepted: 1903 Special Judge
Description

In the movie "Blues Brothers", the orphanage where Elwood and Jack were raised may be sold to the Board of Education if they do not pay 5000 dollars in taxes at the Cook Country Assessor's Office in Chicago. After playing a gig in the Palace Hotel ballroom
to earn these 5000 dollars, they have to find a way to Chicago. However, this is not so easy as it sounds, since they are chased by the Police, a country band and a group of Nazis. Moreover, it is 106 miles to Chicago, it is dark and they are wearing sunglasses. 

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

The input contains several test cases. 

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

For each test case, calculate the probability of the safest path from intersection 1 (the Palace Hotel) to intersection n (the Honorable Richard J. Daley Plaza in Chicago). You can assume that there is at least one path between intersection 1 and n. 

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


最长路,此题所有的最短路算法都可以(包括dijkstra),可以证明dijkstra在这道题计算最长路是正确的,但一般条件不一定正确。这里用floyd。

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;

double adj[110][110];
int main()
{
int n,m,fr,to,w;
while(scanf("%d",&n),n){
memset(adj,0,sizeof adj);
scanf("%d",&m);
for(int i=0;i<m;i++){
scanf("%d%d%d",&fr,&to,&w);
adj[fr][to]=adj[to][fr]=w/100.0;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
adj[i][j]=max(adj[i][j],adj[i][k]*adj[k][j]);
printf("%.6f percent\n",adj[1]
*100);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: