| 记录编号 | 
        21862 | 
        评测结果 | 
        AAAAAAAAWW | 
    
    
        | 题目名称 | 
        501.最小密度路径 | 
        最终得分 | 
        80 | 
            
    
    
        | 用户昵称 | 
         wangwangdog | 
        是否通过 | 
        未通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        2.170 s  | 
    
    
        | 提交时间 | 
        2010-11-15 17:23:57 | 
        内存使用 | 
        1.28 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		#include<stdio.h>
#include<math.h>
long long n,m,map[51][51],i,j,k,nn,a,b,l,d[51][51][51],bian;
FILE *fin,*fout;
int main()
{
	fin=fopen("path.in","rb");
	fout=fopen("path.out","wb");
	fscanf(fin,"%lld%lld\n",&n,&m);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			map[i][j]=2111111111;
	for(i=1;i<=m;i++)
	{
		fscanf(fin,"%lld%lld%lld\n",&a,&b,&l);
		if(map[a][b]==2100000000)map[a][b]=l;
		else if(l<map[a][b])map[a][b]=l;
	}
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			for(k=1;k<=n;k++)
				d[i][j][k]=2111111111;
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			d[i][j][1]=map[i][j];
			
		}
	
	for(bian=2;bian<=n;bian++)
	{
		for(k=1;k<=n;k++)
			for(i=1;i<=n;i++)
				for(j=1;j<=n;j++)
				{
					
					if(d[i][k][bian-1]+d[k][j][1]<d[i][j][bian])
					{d[i][j][bian]=d[i][k][bian-1]+d[k][j][1];}
					
				}
	}
	fscanf(fin,"%lld\n",&nn);
	for(i=1;i<=nn;i++)
	{
		fscanf(fin,"%lld%lld\n",&a,&b);
		double min=2111111111;
		for(j=1;j<=n;j++)
		{
			if(d[a][b][j]!=2111111111)
			{
				double rr=d[a][b][j];
				if(rr/j<min)min=rr/j;
			}
		}
		if(min>=2099999999)fprintf(fout,"OMG!\n");
		
		else fprintf(fout,"%0.3lf\n",min);
	}
	fclose(fin);
	fclose(fout);
	return 0;
}