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