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: 一道吓唬人的水题 注意这是一棵树,两点间仅有唯一的路径! 于是每个“关键点”和起点只有一条路径,想去起点另一棵子树上的节点必须要回到起点 如果必 ...
随机推荐
- springmvc使用aop心得
第一步:创建aop拦截类: @Component @Aspect public class ControllerSelectorInterceptor { @Before("executio ...
- php并发处理
最近某个项目用php生成文件,但是由于文件量太大,单个进程生成需要很长的时间,所以想并发进行处理. 网上查找了下相关的资料,php本身是没有多线程的概念的,那就只能用多进程了,再找资料却是 ...
- java的真相
所谓编译,就是把源代码“翻译”成目标代码——大多数是指机器代码——的过程.针对Java,它的目标代码不是本地机器代码,而是虚拟机代码. 编译原理里面有一个很重要的内容是编译器优化.所谓编译器优化是指, ...
- UML图基本类型
use case model用例模型 analysiss model分析模型 design model设计模型 implementation model实现模型 deployment model部署模 ...
- 网络编程(学习整理)---3--(Udp)FeiQ实现广播消息群发
1.广播群发消息: 这里使用的任然是UDP协议,使用方法还是比较简单的! 我就记录一下需要注意的一些地方(笔记): (1)这里是在局域网内,借用FeiQ聊天软件,编写一段程序,实现对局域网内的每一个登 ...
- MVVM模式应用 之NotificationObject类
public abstract class NotificationObject : INotifyPropertyChanged { public event PropertyChanged ...
- Qt Linguist的使用
国际化的英文表述为Internationalization,通常简写为I18N,QT Linguist是一个将“tr(“”)”引号中的语言翻译成另外语言的工具 1. 创建.ts文件 在Creator中 ...
- 正则过滤html标签
var html = "<p>好好学习,<br>天天向上</p>"; var re=/<[^>]+>/g; var text ...
- 实现Action(含Action访问ServletAPI)
Action里是否包含实例变量不重要,重要的是包含setter和getter方法. Action可用于封装请求参数和处理结果.jsp中使用struts2输出:<s:property value= ...
- jquery 效果
效果1.基本效果 1.1 show([speed,[easing],[fn]]) 如果元素本身是可见的,则不对其作任何改变.如果元素是隐藏的,则使其可见. $("p&qu ...