记录编号 71608 评测结果 AAAAAAAAAA
题目名称 [NOIP 2009]最优贸易 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 Pascal 运行时间 0.260 s
提交时间 2013-10-10 16:48:43 内存使用 5.38 MiB
显示代码纯文本
Program sl;
  var
    h,w,q,max,min:array[0..100000]of longint;
    ne,ver:array[0..500000]of longint;
    v:array[0..100000]of boolean;
    tol,n,m,x,y,z,i,head,tail:longint;
  procedure add(x,y:longint);
    begin
      inc(tol);
      ver[tol]:=y;
      ne[tol]:=h[x];
      h[x]:=tol;
    end;
  begin
    assign(input,'trade.in');
    reset(input);
    assign(output,'trade.out');
    rewrite(output);
    read(n,m);
    for i:=1 to n do
      begin
        read(w[i]);
        min[i]:=w[i];
      end;
    for i:=1 to m do
      begin
        readln(x,y,z);
        add(x,y);
        if z=2 then add(y,x);
      end;
    q[1]:=1;
    v[1]:=true;
    head:=0;
    tail:=1;
    fillchar(max,sizeof(max),$ff);
    max[1]:=0;
    while head<>tail do
      begin
        head:=(head+1)mod n;
        x:=q[head];
        v[x]:=false;
        y:=h[x];
        while y<>0 do
          begin
            z:=ver[y];
            if (max[z]<max[x])or(min[z]>min[x]) then
              begin
                if max[z]<max[x] then max[z]:=max[x];
                if min[z]>min[x] then min[z]:=min[x];
                if w[z]-min[z]>max[z] then max[z]:=w[z]-min[z];
                if not v[z] then
                  begin
                    tail:=(tail+1)mod n;
                    q[tail]:=z;
                    v[z]:=true;
                  end;
              end;
            y:=ne[y];
          end;
      end;
    writeln(max[n]);
    close(input);
    close(output);
  end.