记录编号 131945 评测结果 AAAAAAAAAA
题目名称 最小花费 最终得分 100
用户昵称 Gravatar乌龙猹 是否通过 通过
代码语言 C++ 运行时间 0.151 s
提交时间 2014-10-25 06:34:03 内存使用 3.03 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cmath>
  3. #include<queue>
  4. #include<stack>
  5. #include<cstring>
  6. #include<cstdlib>
  7. #include<algorithm>
  8. using namespace std;
  9.  
  10. struct dx{
  11. int to,next;
  12. double data;
  13. };
  14. dx jb[200001];
  15. int sum;
  16. int last[2001];
  17.  
  18. int n,m;
  19. int st,en;
  20.  
  21. double spfa(int);
  22. void insert(int,int,int);
  23.  
  24. int main()
  25. {
  26. freopen("moneyb.in","r",stdin);
  27. freopen("moneyb.out","w",stdout);
  28. scanf("%d%d",&n,&m);
  29. for(int i=1;i<=m;i++)
  30. {
  31. int x,y,z;
  32. scanf("%d%d%d",&x,&y,&z);
  33. insert(x,y,z);
  34. insert(y,x,z);
  35. }
  36. scanf("%d%d",&st,&en);
  37. printf("%.8lf\n",double(100)/spfa(st));
  38. fclose(stdin);
  39. fclose(stdout);
  40. return 0;
  41. }
  42. void insert(int From,int To,int p)
  43. {
  44. sum++;
  45. jb[sum].to=To;
  46. jb[sum].next=last[From];
  47. last[From]=sum;
  48. jb[sum].data=double(100-p)/100;
  49. }
  50. double spfa(int x)
  51. {
  52. queue<int> q;
  53. bool flag[2001]={0};
  54. double dis[2001]={0};
  55. dis[x]=1;
  56. q.push(x);
  57. flag[x]=1;
  58. while(!q.empty())
  59. {
  60. int k=q.front();
  61. int i=last[k];
  62. while(i)
  63. {
  64. int t=jb[i].to;
  65. if(dis[t]<dis[k]*jb[i].data)
  66. {
  67. dis[t]=dis[k]*jb[i].data;
  68. if(!flag[t])
  69. {
  70. q.push(t);
  71. flag[t]=1;
  72. }
  73. }
  74. i=jb[i].next;
  75. }
  76. flag[k]=0;
  77. q.pop();
  78. }
  79. return dis[en];
  80. }