poj1935
给定起点和要经过的点,求最短路径
我发现,关于路径的treedp,设计的关键在于每个节点的状态怎么表示
对于这道题,有一种常见的方法是令f[i,1]表示经过这个点且还要回来的路径,
f[i,0]表示留在以i为根的子树的某个节点上不回到i的最短路径
然后方程就很好设计了,具体见程序
type node=record
next,cost,point:longint;
end; var edge:array[..] of node;
need,v:array[..] of boolean;
p:array[..] of longint;
f:array[..,..] of longint;
len,n,m,root,x,y,z,i:longint; procedure add(x,y,z:longint);
begin
inc(len);
edge[len].point:=y;
edge[len].cost:=z;
edge[len].next:=p[x];
p[x]:=len;
end; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; procedure treedp(x:longint);
var i,y:longint;
begin
i:=p[x];
v[x]:=true;
while i<>- do
begin
y:=edge[i].point;
if not v[y] then
begin
treedp(y);
if need[y] then
begin
f[x,]:=min(f[y,]+f[x,]+edge[i].cost,f[x,]+edge[i].cost*+f[y,]);
//在停在之前的最优点和停在当前点为根的子树上这两种情况选择一个较优的
f[x,]:=f[x,]+f[y,]+edge[i].cost*; //无需多说
need[x]:=true;
end;
end;
i:=edge[i].next;
end;
end; begin
readln(n,root);
fillchar(p,sizeof(p),);
for i:= to n- do
begin
readln(x,y,z);
add(x,y,z);
add(y,x,z);
end;
readln(m);
for i:= to m do
begin
read(x);
need[x]:=true;
end;
treedp(root);
writeln(f[root,]);
end.
poj1935的更多相关文章
- poj1935(树形dp)
题目链接:http://poj.org/problem?id=1935 题意:带边权的树,给点一个根,问从根出发遍历某些点,所需的最小花费. 分析:树上任意两点的路径是唯一的,直接dfs一遍,可以得出 ...
- OJ题目分类
POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...
- [POJ 1935] Journey
Link: POJ1935 传送门 Solution: 一道吓唬人的水题 注意这是一棵树,两点间仅有唯一的路径! 于是每个“关键点”和起点只有一条路径,想去起点另一棵子树上的节点必须要回到起点 如果必 ...
随机推荐
- ADO简单封装(MFC)
简单封装了一下,不是很严谨. /************************************************************************/ /* INSTRUC ...
- 使用Navicat for Oracle 出现的错误
错误提示: 意思是不能创建oci环境我们需要对 Navicat for Oracle 做一下配置依此选择 Tools -> Miscellaneous -> OCI OCI library ...
- SQL 2012的分页
今天看到一篇文章介绍2012中的分页,就想测试一下新的分页方法比原先的有多少性能的提升,下面是我的测试过程(2012的分页语法这里不在做多的说明,MSDN上一搜就有): 首先我们来构造测试数据: -- ...
- 一个jquery的图片下拉列表 ddSlick
[ddSlick]http://designwithpc.com/Plugins/ddSlick How to use with JSON data Include the plugin javasc ...
- CoreAnimation1-图层树、寄宿图以及图层几何学
(一)图层的树状结构 Core Animation其实是一个令人误解的命名.你可能认为它只是用来做动画的,但实际上它是从一个叫做Layer Kit这么一个不怎么和动画有关的名字演变而来,所以做动画这只 ...
- ios专题 - sandbox机制
[原创]http://www.cnblogs.com/luoguoqiang1985 ios在安装APP时,把APP的偏好设置与数据放在sandbox里.sandbox通过一系列细颗粒度控制APP访问 ...
- Exercise DS
#include <iostream> using namespace std; typedef struct Node { Node *next; int data; }Node, *L ...
- 分享一个自己写的基于TP的关系模型(三)
这段时间对模型做了升级和优化,并将版本更新到TP3.2. 下载 下载后请将目录放置TP的Library目录下 1.数据节点优化,原来的节点为模型的名称或者表名,现在更新为定义关系的方法名 public ...
- 网页解析Jsoup简单使用
public static void main(String[] args) throws IOException { //System.out.println("Hello World!& ...
- oracle简单两个操作
sqlplus sys/密码 as sysdba ALTER USER 账号 IDENTIFIED BY 新密码; select * from (select rownum 别名 ,表名.* fro ...