记录编号 98288 评测结果 AAAAAAAA
题目名称 最小密度路径 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.060 s
提交时间 2014-04-22 15:52:27 内存使用 0.97 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<cmath>
  6. using namespace std;
  7. const int SIZEN=55,INF=0x7fffffff/2;
  8. int len[SIZEN][SIZEN][SIZEN];
  9. double ans[SIZEN][SIZEN];
  10. int N,M,Q;
  11. void answer(void){
  12. scanf("%d",&Q);
  13. while(Q--){
  14. int a,b;
  15. scanf("%d%d",&a,&b);
  16. if(ans[a][b]>100000){
  17. printf("OMG!\n");
  18. }
  19. else printf("%.3lf\n",ans[a][b]);
  20. }
  21. }
  22. void work(void){
  23. for(int i=1;i<=N;i++){
  24. for(int j=1;j<=N;j++){
  25. ans[i][j]=INF+0.0;
  26. if(i==j) ans[i][j]=0;
  27. for(int k=1;k<=N;k++){
  28. if(len[i][j][k]==INF) continue;
  29. double temp=(len[i][j][k]+0.0)/(k+0.0);
  30. ans[i][j]=min(ans[i][j],temp);
  31. }
  32. }
  33. }
  34. }
  35. void floyd(void){
  36. for(int t=2;t<=N;t++){
  37. for(int k=1;k<=N;k++){
  38. for(int i=1;i<=N;i++){
  39. for(int j=1;j<=N;j++){
  40. if(len[k][j][1]==INF) continue;
  41. if(len[i][k][t-1]==INF) continue;
  42. len[i][j][t]=min(len[i][j][t],len[i][k][t-1]+len[k][j][1]);
  43. }
  44. }
  45. }
  46. }
  47. }
  48. void read(void){
  49. scanf("%d%d",&N,&M);
  50. for(int i=1;i<=N;i++) for(int j=1;j<=N;j++) for(int k=0;k<=N;k++) len[i][j][k]=INF;
  51. for(int i=1;i<=M;i++){
  52. int a,b,w;
  53. scanf("%d%d%d",&a,&b,&w);
  54. len[a][b][1]=min(len[a][b][1],w);
  55. }
  56. }
  57. int main(){
  58. freopen("path.in","r",stdin);
  59. freopen("path.out","w",stdout);
  60. read();
  61. floyd();
  62. work();
  63. answer();
  64. return 0;
  65. }