比赛 20110727 评测结果 AAAAAAAAA
题目名称 道路重建 最终得分 100
用户昵称 donny 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-07-27 10:01:17
显示代码纯文本
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <iomanip>
  6.  
  7. using namespace std;
  8.  
  9. int i,j,k,l,s,t;
  10. int a[101][101],b[101][101],n,m;
  11. int f[101];
  12. int queue[10000];
  13. int head,tail;
  14.  
  15. void spfa()
  16. {
  17. head=1;
  18. tail=1;
  19. queue[1]=s;
  20. for (i=1;i<=n;i++)
  21. f[i]=99999999;
  22. f[s]=0;
  23. while (head<=tail)
  24. {
  25. for (i=1;i<=n;i++)
  26. if (b[queue[head]][i]!=-1)
  27. {
  28. if (f[queue[head]]+b[queue[head]][i]<f[i])
  29. {
  30. tail++;
  31. queue[tail]=i;
  32. f[i]=f[queue[head]]+b[queue[head]][i];
  33. }
  34. }
  35. head++;
  36. }
  37. }
  38.  
  39.  
  40. int main()
  41. {
  42. ifstream fin("rebuild.in");
  43. ofstream fout("rebuild.out");
  44. fin>>n>>m;
  45. for (i=1;i<=m;i++)
  46. {
  47. fin>>j>>k>>l;
  48. a[j][k]=l;
  49. a[k][j]=l;
  50. }
  51. fin>>m;
  52. for (i=1;i<=n;i++)
  53. for (j=1;j<=n;j++)
  54. {
  55. if (a[i][j]==0)
  56. {
  57. b[i][j]=-1;
  58. }
  59. else
  60. {
  61. b[i][j]=0;
  62. }
  63. }
  64. for (i=1;i<=m;i++)
  65. {
  66. fin>>j>>k;
  67. b[j][k]=a[j][k];
  68. b[k][j]=a[k][j];
  69. }
  70. fin>>s>>t;
  71. spfa();
  72. fout<<f[t];
  73. fin.close();
  74. fout.close();
  75. return 0;
  76. }