记录编号 106197 评测结果 AAAAAAAAAA
题目名称 [USACO 3.2] 香甜的黄油 最终得分 100
用户昵称 Gravatar筽邝 是否通过 通过
代码语言 Pascal 运行时间 0.207 s
提交时间 2014-06-13 15:49:11 内存使用 0.21 MiB
显示代码纯文本
  1. program cojs309;
  2. const
  3. maxm=1500;
  4. maxn=800;
  5. type
  6. tnode=record
  7. x,w,next:longint;
  8. end;
  9. var
  10. table:array[1..maxm*2]of tnode;
  11. d,h:array[1..maxn]of longint;
  12. a:array[1..500]of longint;
  13. ans,t,len,i,j,x,k,n,m,cow:longint;
  14.  
  15. procedure add(i,j,x:longint);
  16. begin
  17. inc(len);
  18. table[len].x:=j; table[len].w:=x;
  19. table[len].next:=h[i];
  20. h[i]:=len;
  21. end;
  22.  
  23. procedure spfa(k:longint);
  24. var
  25. i,p,front,tail:longint;
  26. q:array[0..maxn]of longint;
  27. v:array[1..maxn]of boolean;
  28. begin
  29. fillchar(v,sizeof(v),true);
  30. for i:=1 to n do d[i]:=maxlongint;
  31. front:=0; tail:=1;
  32. q[1]:=k; v[k]:=false; d[k]:=0;
  33. while front<>tail do
  34. begin
  35. inc(front);
  36. front:=front mod n;
  37. p:=h[q[front]];
  38. while p<>0 do
  39. begin
  40. if d[table[p].x]>d[q[front]]+table[p].w then
  41. begin
  42. d[table[p].x]:=d[q[front]]+table[p].w;
  43. if v[table[p].x] then
  44. begin
  45. inc(tail);
  46. tail:=tail mod n;
  47. q[tail]:=table[p].x;
  48. v[table[p].x]:=false;
  49. end;
  50. end;
  51. p:=table[p].next;
  52. end;
  53. v[q[front]]:=true;
  54. end;
  55. end;
  56.  
  57. begin
  58. assign(input,'butter.in');reset(input);
  59. assign(output,'butter.out');rewrite(output);
  60.  
  61. readln(cow,n,m);
  62. for i:=1 to cow do
  63. readln(a[i]);
  64. for k:=1 to m do
  65. begin
  66. readln(i,j,x);
  67. add(i,j,x);
  68. add(j,i,x);
  69. end;
  70.  
  71. ans:=maxlongint;
  72. for i:=1 to n do
  73. begin
  74. spfa(i);
  75. t:=0;
  76. for j:=1 to cow do
  77. inc(t,d[a[j]]);
  78. if t<ans then ans:=t;
  79. end;
  80.  
  81. writeln(ans);
  82.  
  83. close(input);close(output);
  84. end.