比赛 NOIP模拟赛by mzx Day1 评测结果 WWWWWWWTTT
题目名称 零食店 最终得分 0
用户昵称 燕哥到此一游 运行时间 4.562 s
代码语言 Pascal 内存使用 0.28 MiB
提交时间 2016-10-19 20:31:21
显示代码纯文本
program fuckyoutwice;
const
  maxn=10000;
var
  w,dist:array[1..10000] of longint;
  a:array[1..100,1..100] of longint;
  i,j,ans,n,m,o,s,c,d,x0,y0,l:longint;
  fin,fout:text;
procedure spfa;
  var
  q:array[1..maxn] of integer;
  v:array[1..maxn] of boolean;
{  a:array[1..maxn,1..maxn] of integer;}
  h,t,i,x,j:integer;
  begin
  for i:=1 to n do
    dist[i]:=maxint;
  fillchar(q,sizeof(q),0);
  fillchar(v,sizeof(v),false);
{  fillchar(b,sizeof(b),0); }
  t:=1;
  h:=0;
  q[1]:=s;
  v[s]:=true;
  dist[s]:=0;
  while h<t do
    begin
      h:=(h+1) ;
      x:=q[h];
      v[x]:=false;
      for i:=1 to n do  {
        if b[i]>n-1 then
          begin
            writeln('error!');
            exit;
          end
        else }
          if (w[i]<=c) and (dist[x]+a[x,i]<dist[i]) then
            begin
               dist[i]:=dist[x]+a[x,i];
               if not (v[i]) then
                  begin
                    t:=(t+1) ;
                    q[t]:=i; v[i]:=true;
                 {   b[i]:=b[i]+1; }
                  end;
            end;
      {v[i]:=false;}
    end;
end;

begin
  assign(fin,'snackstore.in');
  assign(fout,'snackstore.out');
  reset(fin);
  rewrite(fout);
  readln(fin,n,m,o);
  for i:=1 to n do
    read(fin,w[i]);
  for i:=1 to m do
    begin
      readln(fin,x0,y0,l);
      a[x0,y0]:=l;
      a[y0,x0]:=l;
    end;
  for i:=1 to o do
    begin
      readln(fin,s,c,d);
      spfa;
      ans:=1;            {for j:=1 to n do write(dist[j],','); writeln;  }
      for j:=1 to n do
        if dist[j]<=d
        then ans:=ans+1;
      writeln(fout,ans);
    end;
  close(fin);
  close(fout);
end.