记录编号 21862 评测结果 AAAAAAAAWW
题目名称 最小密度路径 最终得分 80
用户昵称 Gravatarwangwangdog 是否通过 未通过
代码语言 C++ 运行时间 2.170 s
提交时间 2010-11-15 17:23:57 内存使用 1.28 MiB
显示代码纯文本
  1. #include<stdio.h>
  2. #include<math.h>
  3. long long n,m,map[51][51],i,j,k,nn,a,b,l,d[51][51][51],bian;
  4.  
  5. FILE *fin,*fout;
  6. int main()
  7. {
  8. fin=fopen("path.in","rb");
  9. fout=fopen("path.out","wb");
  10. fscanf(fin,"%lld%lld\n",&n,&m);
  11. for(i=1;i<=n;i++)
  12. for(j=1;j<=n;j++)
  13. map[i][j]=2111111111;
  14. for(i=1;i<=m;i++)
  15. {
  16. fscanf(fin,"%lld%lld%lld\n",&a,&b,&l);
  17. if(map[a][b]==2100000000)map[a][b]=l;
  18. else if(l<map[a][b])map[a][b]=l;
  19. }
  20. for(i=1;i<=n;i++)
  21. for(j=1;j<=n;j++)
  22. for(k=1;k<=n;k++)
  23. d[i][j][k]=2111111111;
  24. for(i=1;i<=n;i++)
  25. for(j=1;j<=n;j++)
  26. {
  27. d[i][j][1]=map[i][j];
  28. }
  29. for(bian=2;bian<=n;bian++)
  30. {
  31. for(k=1;k<=n;k++)
  32. for(i=1;i<=n;i++)
  33. for(j=1;j<=n;j++)
  34. {
  35. if(d[i][k][bian-1]+d[k][j][1]<d[i][j][bian])
  36. {d[i][j][bian]=d[i][k][bian-1]+d[k][j][1];}
  37. }
  38. }
  39. fscanf(fin,"%lld\n",&nn);
  40. for(i=1;i<=nn;i++)
  41. {
  42. fscanf(fin,"%lld%lld\n",&a,&b);
  43. double min=2111111111;
  44. for(j=1;j<=n;j++)
  45. {
  46. if(d[a][b][j]!=2111111111)
  47. {
  48. double rr=d[a][b][j];
  49. if(rr/j<min)min=rr/j;
  50. }
  51. }
  52. if(min>=2099999999)fprintf(fout,"OMG!\n");
  53. else fprintf(fout,"%0.3lf\n",min);
  54. }
  55. fclose(fin);
  56. fclose(fout);
  57. return 0;
  58. }