博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOIP 2009 最优贸易
阅读量:6107 次
发布时间:2019-06-21

本文共 2383 字,大约阅读时间需要 7 分钟。

2013-09-22 11:23

//By BLADEVIL var    n, m                :longint;    mark                :array[0..100100] of longint;    pre, other          :array[0..1000100] of longint;    last                :array[0..100100] of longint;    l,l2                :longint;    que                 :array[0..100100] of longint;    flag                :array[0..100100] of boolean;    d, d2               :array[0..100100] of longint;    ans                 :longint;    pre2, other2        :array[0..1000100] of longint;    last2               :array[0..100100] of longint;function max(a,b:longint):longint;begin    if a>b then max:=a else max:=b;end;function min(a,b:longint):longint;begin    if a>b then min:=b else min:=a;end;procedure connect(x,y:longint);begin    inc(l);    pre[l]:=last[x];    last[x]:=l;    other[l]:=y;end;procedure connect2(x,y:longint);begin    inc(l2);    pre2[l2]:=last2[x];    last2[x]:=l2;    other2[l2]:=y;end;procedure init;var    i                   :longint;    x, y, z             :longint;begin    read(n,m); l:=1; l2:=1;    for i:=1 to n do read(mark[i]);    for i:=1 to m do    begin        read(x,y,z);        connect(x,y);        connect2(y,x);        if z=2 then        begin            connect(y,x);            connect2(x,y)        end;    end;end;procedure bfs;var    q, p, cur           :longint;    h, t                :longint;    i                   :longint;begin    filldword(d,sizeof(d) div 4, maxlongint div 10);    h:=0; t:=1;    que[1]:=1; flag[1]:=true;    d[1]:=mark[1];    while h<>t do    begin        h:=h mod 10000+1;        cur:=que[h];        q:=last[cur];        while q<>0 do        begin            p:=other[q];            if (d[cur]
t do begin h:=h mod 10000+1; cur:=que[h]; q:=last2[cur]; while q<>0 do begin p:=other2[q]; if (d2[cur]>d2[p]) or (not flag[p]) then begin d2[p]:=max(d2[p],d2[cur]); d2[p]:=max(d2[p],mark[p]); if not flag[p] then begin t:=t mod 10000+1; que[t]:=p; flag[p]:=true; end; end; q:=pre2[q]; end; end; for i:=1 to n do ans:=max(ans,d2[i]-d[i]); writeln(ans);end;begin init; bfs; bfs2;end.

 

转载于:https://www.cnblogs.com/BLADEVIL/p/3433517.html

你可能感兴趣的文章
Oracle表分区
查看>>
centos 下安装g++
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>