hdu 1596 find the safest road 최 단 로 FLoyd 알고리즘

find the safest road
Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7892    Accepted Submission(s): 2798
Problem Description
XX 별 에는 많은 도시 가 있 습 니 다.도시 마다 하나 이상 의 비행 통로 가 있 습 니 다.그러나 모든 길이 안전 한 것 은 아 닙 니 다.모든 길 에는 안전 계수 s 가 있 습 니 다.s 는 0 과 1 칸 의 실수(0,1 포함)입 니 다.u 에서 v 까지 의 통로 P 의 안전 도 는 Safe(P)=s(e1)*s(e2)...*s(ek)e1,e2,ek 는 P 의 가장자리 입 니 다.지금 8600 은 여행 을 가 고 싶 습 니 다.이렇게 많은 길 을 마주 하고 그 는 가장 안전 한 길 을 찾 으 려 고 한다.하지만 8600 은 수학 을 잘 못 해 요.도와 주 고 싶 어 요^ ^
 
Input
여러 개의 테스트 인 스 턴 스 를 포함 하여 입력 하 십시오.모든 인 스 턴 스 는 다음 을 포함 합 니 다.
첫 줄n 도시 의 개수 n<=1000;
이 어 n*n 의 행렬 은 두 도시 간 의 안전 계 수 를 나타 낸다.(0 은 그 두 도시 사이 에 직접적인 통로 가 없다 고 이해 할 수 있다)
이 어 8600 개 여행 코스 Q 개 로 줄 당 두 개의 숫자 가 있 으 며 8600 이 있 는 도시 와 가 야 할 도 시 를 나타 낸다.
 
Output
86 이 그의 목적지 에 도달 하지 못 하면"What a pity!"를 출력 합 니 다.
다른 수출 두 도시 간 의 가장 안전 한 도로 의 안전 계 수 는 세 개의 소 수 를 유지한다.
 
Sample Input

   
   
   
   
3 1 0.5 0.5 0.5 1 0.4 0.5 0.4 1 3 1 2 2 3 1 3

 
Sample Output

   
   
   
   
0.500 0.400 0.500

 
물이 지나 가면 할 말 이 없다.
코드:
#include <stdio.h>
#define MAX 1010
double dp[MAX][MAX] ;

double max(double a , double b)
{
	return a>b?a:b ;
}

void floyd(int n)
{
	for(int k = 1 ; k <= n ; ++k)
	{
		for(int i = 1 ; i <= n ; ++i)
		{
			for(int j = 1 ; j <= n ; ++j)
			{
				dp[i][j] = max(dp[i][j],dp[i][k]*dp[k][j]) ;
			}
		}
	}
}

int main()
{
	int n ;
	while(~scanf("%d",&n))
	{
		for(int i = 1 ; i <= n ; ++i)
		{
			for(int j = 1 ; j <= n ; ++j)
			{
				scanf("%lf",&dp[i][j]) ;
			}
		}
		int m ;
		floyd(n) ;
		scanf("%d",&m) ;
		for(int i = 0 ; i < m ; ++i)
		{
			int x , y;
			scanf("%d%d",&x,&y) ;
			if(dp[x][y] == 0)
			{
				puts("What a pity!") ;
			}
			else
			{
				printf("%.3lf
",dp[x][y]) ; } } } return 0 ; }

그대 와 함께 격려 하 다

좋은 웹페이지 즐겨찾기