bzoj 1880 最短路
我们首先知道,答案肯定是最短路图中的某段公共链,那么设(x,y)为x到y的最短路,那么答案为((s1,t1)+(s2,t2)-min((s1,s2)+(t1,t2),(s1,t2),(s2,t1))) div 2,这两种情况分别可以画成下面的图
这样就可以十分明显的看出了。因为中间的一段算了两遍,所以要div 2。
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
var
n, m :longint;
s1, t1, s2, t2 :longint;
pre, other, len :array[..] of longint;
last :array[..] of longint;
flag :array[..] of boolean;
vis :array[..] of boolean;
l :longint;
dis, que :array[..] of longint;
d1, d2, d3, d4 :array[..] of longint;
ans :longint; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; procedure connect(x,y,z:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
len[l]:=z;
end; procedure init;
var
i :longint;
x, y, z :longint;
begin
read(n,m,s1,t1,s2,t2);
l:=;
for i:= to m do
begin
read(x,y,z);
connect(x,y,z);
connect(y,x,z);
end;
fillchar(vis,sizeof(vis),true);
end; procedure spfa(x:longint);
var
q, p :longint;
h, t, cur :longint;
begin
filldword(dis,sizeof(dis) div ,maxlongint div );
h:=; t:=;
que[]:=x; dis[x]:=;
while h<>t do
begin
h:=h mod +;
cur:=que[h];
flag[cur]:=false;
q:=last[cur];
while q<> do
begin
if vis[q] then
begin
p:=other[q];
if dis[p]>dis[cur]+len[q] then
begin
dis[p]:=dis[cur]+len[q];
if not flag[p] then
begin
t:=t mod +;
que[t]:=p;
flag[p]:=true;
end;
end;
end;
q:=pre[q];
end;
end;
end; procedure main;
var
ans1, ans2 :longint;
tot1, tot2 :longint;
i :longint;
q, p :longint; begin
spfa(s1);
ans1:=dis[t1];
for i:= to n do d1[i]:=dis[i]; spfa(s2);
ans2:=dis[t2];
for i:= to n do d2[i]:=dis[i]; spfa(t1);
for i:= to n do d3[i]:=dis[i]; spfa(t2);
for i:= to n do d4[i]:=dis[i]; fillchar(vis,sizeof(vis),false);
for i:= to n do
begin
q:=last[i];
while q<> do
begin
p:=other[q];
if d1[i]+len[q]+d3[p]=ans1 then
begin
vis[q]:=true;
vis[q xor ]:=true;
end;
if d2[i]+len[q]+d4[p]=ans2 then
begin
vis[q]:=true;
vis[q xor ]:=true;
end;
q:=pre[q];
end;
end;
spfa(s1);
tot1:=dis[s2];
tot2:=dis[t2];
spfa(t1);
tot1:=tot1+dis[t2];
tot2:=tot2+dis[s2];;
ans:=(ans1+ans2-min(tot1,tot2)) div ;
ans:=max(ans,);
writeln(ans);
end; begin
init;
main;
end.
bzoj 1880 最短路的更多相关文章
- BZOJ 1880: [Sdoi2009]Elaxia的路线( 最短路 + dp )
找出同时在他们最短路上的边(dijkstra + dfs), 组成新图, 新图DAG的最长路就是答案...因为两人走同一条路但是不同方向也可以, 所以要把一种一个的s,t换一下再更新一次答案 ---- ...
- bzoj 1880 [Sdoi2009]Elaxia的路线(最短路+拓扑序)
Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...
- 【BZOJ 1880】 [Sdoi2009]Elaxia的路线 (最短路树)
1880: [Sdoi2009]Elaxia的路线 Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. ...
- Bzoj 3694: 最短路 树链剖分
3694: 最短路 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 67 Solved: 34[Submit][Status][Discuss] Des ...
- BZOJ 3040 最短路 (堆优化dijkstra)
这题不是裸的最短路么?但是一看数据范围就傻了.点数10^6,边数10^7.这个spfa就别想了(本来spfa就是相当不靠谱的玩意),看来是要用堆优化dijkstra了.但是,平时写dijkstra时为 ...
- BZOJ 3040: 最短路(road) ( 最短路 )
本来想学一下配对堆的...结果学着学着就偏了... 之前 kpm 写过这道题 , 前面的边不理它都能 AC .. 我也懒得去写前面的加边了... 用 C++ pb_ds 库里的 pairing_hea ...
- BZOJ 3040: 最短路(road) [Dijkstra + pb_ds]
3040: 最短路(road) Time Limit: 60 Sec Memory Limit: 200 MBSubmit: 2476 Solved: 814[Submit][Status][Di ...
- bzoj 1880: [Sdoi2009]Elaxia的路线
Description 最近,Elaxia和w的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w每天都要奔波于宿舍和实验室之间,他们 希 ...
- 【刷题】BZOJ 2125 最短路
Description 给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径. Input 输入的第一行包含三个整数,分别表示N和M和Q 下接M行,每行三个 ...
随机推荐
- vi/vim 命令使用详解
1.Linux下创建文件 vi test.txt 或者 vim test.txt 或者 touch test.txt 2.vi/vim 使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Co ...
- 自动化测试学习之路--java String、StringBuilder
Java中的String和StringBuilder类: 1.String对象是不可变的.每一个看起来修改了String值的方法,实际上都是创建了全新的String对象.代码示例如下: String ...
- TW实习日记:第15天
今天又是修修补补的一天,不过最开心的是因为项目比较特殊,有自己的后端服务器,有一些接口相关的bug可以让我直接写Java代码,终于可以碰一碰Java了哈哈.有好几个bug都是之前的人粗心设置了多余或者 ...
- Python——数据类型之dict
字典,相当于一个列表,不过列表的索引是数字,字典的索引是数字或者字符串. 1.字典的访问 字典是典型的key-value结构,一个key对应着一个value,key就是索引,value就是要保存的值 ...
- React远程服务
http://web1.dev5.net:3002/cloud/start?server=exf2&name=zhangxiaocong http://web1.dev5.net:3002/c ...
- Python参考
python中os模块用法 自动化运维Python系列(五)之常用模块 最常用的Notepad++的快捷键 pycharm快捷键 最全Pycharm教程(1)——定制外观 pycharm教程大全 py ...
- mongolass 中报 ($.content: "say Hi ~") ✖ (type: String)
第二次报这个错了, 一直以为MongoDB的模型用的type 是 String, 一直报错, 找不到原因. // 留言模型1 exports.Comment = mongolass.model('Co ...
- Python之tornado框架实现翻页功能
1.结果如图所示,这里将html页面与网站的请求处理放在不同地方了 start.py代码 import tornado.ioloop import tornado.web from controlle ...
- HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)
Problem Description Pfctgeorge is totally a tall rich and handsome guy. He plans to build a huge wat ...
- DPDK Qos之报文处理流水线
原创翻译,转载请注明出处. 下面是一个支持Qos的复杂报文处理流水线的图: 流水线是通过DPDP可重用的软件库构建出来的.在流水线里实现QoS主要是如下模块:policer,dropper,shced ...