【ZJOI2017 Round1练习&UVA1057】D6T1 Routing(DP,SPFA)
题意:给你一个有向图, 并指定起点和终点。
问要从起点走向终点, 再从终点走向起点, 最少需要走过多少不同的节点。
对于 100%的数据, 有 N<=100, M<=min(1000,N*N)。 图中可能有重边或者自环
思路:

const oo=;
var head1,head2,vet1,vet2,next1,next2:array[..]of longint;
q:array[..]of record
x,y:longint;
end;
dis,f:array[..,..]of longint;
inq:array[..,..]of boolean;
n,m,i,j,k,cas,tot1,tot2,x,y,z:longint; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; procedure spfa;
var i,j,u1,u2,e1,e2,v1,v2,t,w,t1,w1,tmp:longint;
begin
for i:= to n do
for j:= to n do
begin
inq[i,j]:=false;
dis[i,j]:=oo;
end;
t:=; w:=; t1:=; w1:=;
q[].x:=; q[].y:=; inq[,]:=true; dis[,]:=;
while t<w do
begin
inc(t); inc(t1);
if t1=(n*n)<< then t1:=;
u1:=q[t1].x; u2:=q[t1].y; inq[u1,u2]:=false; e1:=head1[u1];
while e1<> do
begin
v1:=vet1[e1];
tmp:=dis[u1,u2];
if v1<>u2 then inc(tmp);
if tmp<dis[v1,u2] then
begin
dis[v1,u2]:=tmp;
if not inq[v1,u2] then
begin
inc(w); inc(w1);
if w1=(n*n)<< then w1:=;
q[w1].x:=v1; q[w1].y:=u2; inq[v1,u2]:=true;
end;
end;
e1:=next1[e1];
end; e2:=head2[u2];
while e2<> do
begin
v2:=vet2[e2];
tmp:=dis[u1,u2];
if v2<>u1 then inc(tmp);
if tmp<dis[u1,v2] then
begin
dis[u1,v2]:=tmp;
if not inq[u1,v2] then
begin
inc(w); inc(w1);
if w1=(n*n)<< then w1:=;
q[w1].x:=u1; q[w1].y:=v2; inq[u1,v2]:=true;
end;
end;
e2:=next2[e2];
end; if (u1<>u2)and(dis[u1,u2]+f[u1,u2]-<dis[u2,u1]) then
begin
dis[u2,u1]:=dis[u1,u2]+f[u1,u2]-;
if not inq[u2,u1] then
begin
inc(w); inc(w1);
if w1=(n*n)<< then w1:=;
q[w1].x:=u2; q[w1].y:=u1; inq[u2,u1]:=true;
end;
end;
end;
end; procedure add1(a,b:longint);
begin
inc(tot1);
next1[tot1]:=head1[a];
vet1[tot1]:=b;
head1[a]:=tot1;
end; procedure add2(a,b:longint);
begin
inc(tot2);
next2[tot2]:=head2[a];
vet2[tot2]:=b;
head2[a]:=tot2;
end; begin
assign(input,'uva1057.in'); reset(input);
assign(output,'uva1057.out'); rewrite(output);
while not eof do
begin
read(n,m);
if n= then break;
for i:= to n do
begin
head1[i]:=;
head2[i]:=;
end;
tot1:=; tot2:=;
inc(cas);
writeln('Network ',cas);
for i:= to n do
for j:= to n do
if i<>j then f[i,j]:=oo;
for i:= to m do
begin
read(x,y);
f[x,y]:=;
add1(x,y);
add2(y,x);
end;
for i:= to n do
for j:= to n do
for k:= to n do f[j,k]:=min(f[j,k],f[j,i]+f[i,k]);
if (f[,]=oo)or(f[,]=oo) then
begin
writeln('Impossible');
writeln;
continue;
end;
spfa;
writeln('Minimum number of nodes = ',dis[,]);
writeln;
end;
close(input);
close(output);
end.
【ZJOI2017 Round1练习&UVA1057】D6T1 Routing(DP,SPFA)的更多相关文章
- 【UVA1057】Routing
[UVA1057]Routing 题面 洛谷 题解 有一个比较好想的dp就是\(f_{i,j}\)表示第一个点在\(i\),第二个点在\(j\)的最小点数,但是直接搞不好转移. 考虑建出反图,那么\( ...
- POJ 3182 The Grove [DP(spfa) 射线法]
题意: 给一个地图,给定起点和一块连续图形,走一圈围住这个图形求最小步数 本来是要做课件上一道$CF$题,先做一个简化版 只要保证图形有一个点在走出的多边形内就可以了 $hzc:$动态化静态的思想,假 ...
- 值得一做》关于一道DP+SPFA的题 BZOJ1003 (BZOJ第一页计划) (normal-)
这是一道数据范围和评测时间水的可怕的题,只是思路有点难想,BUT假如你的思路清晰,完全了解怎么该做,那就算你写一个反LLL和反SLE都能A,如此水的一道题,你不心动吗? 下面贴出题目 Descript ...
- BZOJ1003物流運輸 DP + SPFA
@[DP, SPFA] Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要\(n\)天才能运完.货物运输过程中一般要转 停好几个码头.物流公司通常会设计一条固定的运 ...
- HDU 4085 Peach Blossom Spring 斯坦纳树 状态压缩DP+SPFA
状态压缩dp+spfa解斯坦纳树 枚举子树的形态 dp[i][j] = min(dp[i][j], dp[i][k]+dp[i][l]) 当中k和l是对j的一个划分 依照边进行松弛 dp[i][j] ...
- 【ZJOI2017 Round1练习&BZOJ4774】D3T2 road(斯坦纳树,状压DP)
题意: 对于边带权的无向图 G = (V, E),请选择一些边, 使得1<=i<=d,i号节点和 n − i + 1 号节点可以通过选中的边连通, 最小化选中的所有边的权值和. d< ...
- 【ZJOI2017 Round1练习&BZOJ4767】D1T3 两双手(排列组合,DP)
题意: 100%的数据:|Ax|,|Ay|,|Bx|,|By| <= 500, 0 <= n,Ex,Ey <= 500 思路:听说这是一道原题 只能往右或者下走一步且有禁止点的简化版 ...
- 【ZJOI2017 Round1练习】D4T2 trie(贪心,状压DP)
题意:现在 Matej 手上有 N 个英文小写字母组成的单词, 他想知道,如果将这 N 个单词中的字母分别进行重新排列,形成的字母树的节点数最少是多少. n<=16,len[i]<=100 ...
- 【ZJOI2017 Round1练习&BZOJ5354】D7T3 room(DP)
题意: 思路: 写了两种版本 考场版本 ..,..]of longint; t:..,..]of longint; n,m,i,j,k,oo,ans,d1:longint; function min( ...
随机推荐
- 415 Add Strings 字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和.注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和 ...
- Lucky Number Eight dp
https://www.hackerrank.com/contests/w28/challenges/lucky-number-eight 设dp[i][v]表示前i位数中,得到余数是v的子序列的数目 ...
- 关于jquery获取单选框value属性值为on的问题
当取单选框的value值的时候,前提是要有value这个属性,如果没有value属性那么取出来的就会为on 取value值的常见三种方式为 $("input[name='XXX']:chec ...
- 最新最强短视频SDK——来自RDSDK.COM
北京锐动天地信息技术有限公司成立于2007年9月.多年来一直专注于音视频领域核心技术的研发, 拥有Windows.iOS.Android全平台自主知识产权的领先技术产品. 2011年获得新浪战略投资, ...
- Nodejs AES加密不一致问题的解决
最近在做android游戏,客户端与Nodejs服务端数据的交互用AES进行加密,发现Nodejs与java的加密形式不一样.查询N久资料发现java端需要对密钥再MD5加密一遍(我了个大擦),本来对 ...
- taskctl的后台字符界面登录不了解决办法
今天在使用taskctl的designer时,十多分钟挂了2次,每次挂了之后就签不出来了,只能等半小时,然后在taskctl的QQ群里咨询了,给的解决方案是 http://www.taskctl.co ...
- 读取Java文件到byte数组的三种方式
package zs; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io ...
- Win7 32位 遇到微软 silverlight 5.0安装失败的解决办法
刚开始,也是尝试下载安装,多次都是到99%,提示安装失败! 也查找了很多网上朋友分享的办法,还是不行.重新建立一个管理员账号,还是不行. 后来反复不断的测试,找到原因了,安装99%不成功,但是卸载程序 ...
- 田字格布局html div
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- 编写图形界面下的Java Swing程序,接受用户输入的两个数据为上下限,然后输出上、下限之间的所有素数。(结果部分每行显示10个数据)
这个代码我整体写的比较简单,读者可以简单参考一下,对人家题目要求略微修改了一下,多加了一个“置空”按钮.下图为我设计的界面 运行程序后的截图请看我后面的截图: package com.wangshil ...