1596: [Usaco2008 Jan]电话网络

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 601  Solved: 265
[Submit][Status][Discuss]

Description

Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流。不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无线电通讯塔,来保证任意两块草地间都存在手机信号。所有的N块草地按1..N 顺次编号。 所有草地中只有N-1对是相邻的,不过对任意两块草地A和B(1 <= A <= N; 1 <= B <= N; A != B),都可以找到一个以A开头以B结尾的草地序列,并且序列中相邻的编号所代表的草地相邻。无线电通讯塔只能建在草地上,一座塔的服务范围为它所在的那块草地,以及与那块草地相邻的所有草地。 请你帮FJ计算一下,为了建立能覆盖到所有草地的通信系统,他最少要建多少座无线电通讯塔。

Input

* 第1行: 1个整数,N

* 第2..N行: 每行为2个用空格隔开的整数A、B,为两块相邻草地的编号

Output

* 第1行: 输出1个整数,即FJ最少建立无线电通讯塔的数目

Sample Input

5
1 3
5 2
4 3
3 5

输入说明:

Farmer John的农场中有5块草地:草地1和草地3相邻,草地5和草地2、草地
4和草地3,草地3和草地5也是如此。更形象一些,草地间的位置关系大体如下:
(或是其他类似的形状)
4 2
| |
1--3--5

Sample Output

2

输出说明:

FJ可以选择在草地2和草地3,或是草地3和草地5上建通讯塔。

HINT

 

Source

题解:一道经典的树状DP题,我们可以进行分类讨论,设\(f[i,j] \)表示第i个点,\(j=0\)表示选当前点的最优值,\(j=1\)表示不选当前点且当前点已经被控制的最优值,\(j=2\)表示不选当前点且当前点不被控制的最优值(但是当前点下属的节点必须完全被控制),设\(y \)为\(x \)的下属节点,则有下述关系:
 
\(b[x,0]=\sum min(b[y,0],b[y,1],b[y,2])\)
对于\(b[x,1] \),如果存在\(b[y,0] \leq b[y,1]\)则\(b[x,1]=\sum min(b[y,0],b[y,1])\);否则\(b[x,1]=\sum b[y,1] +\min(b[y,0]-b[y,1])\);如果不可能成立则\( b[x,1]=2147483647 \)
\(b[x,2] = \sum b[y,1] \);如果不可能存在则\(b[x,2]=2147483647\)
 
公式如上,然后DP即可,注意最终的结果应该是\(min(b[1,0],b[1,1])\),而不是\(min(b[1,0],b[1,1],b[1,2])\),毕竟最后一个节点要是方案合法的话,还是必须要被控制的(PS:\(2147483647= maxlongint \)仅代表一个较大的数,便于后续比对操作)
 
 /**************************************************************
Problem:
User: HansBug
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ type
point=^node;
node=record
g:longint;
next:point;
end;
var
i,j,k,l,m,n:longint;
a:array[..] of point;
b:array[..,..] of longint;
c:array[..] of longint;
procedure add(x,y:longint);
var p:point;
begin
new(p);p^.g:=y;
p^.next:=a[x];a[x]:=p;
end;
function min(x,y:longint):longint;
begin
if x<y then min:=x else min:=y;
end;
procedure dp(x:longint);
var
p:point;
a1,a2,a3,a4,a5:longint;
begin
p:=a[x];c[x]:=;
a1:=;a2:=;
a3:=;a4:=;a5:=maxlongint;
while p<>nil do
begin
if c[p^.g]= then
begin
dp(p^.g);
a1:=a1+min(min(b[p^.g,],b[p^.g,]),b[p^.g,]);
if b[p^.g,]=maxlongint then a3:=maxlongint
else if a3<>maxlongint then a3:=a3+b[p^.g,];
if b[p^.g,]<=b[p^.g,] then
begin
a4:=;
a2:=a2+b[p^.g,];
end
else
begin
a5:=min(a5,b[p^.g,]-b[p^.g,]);
a2:=a2+b[p^.g,];
end;
end;
p:=p^.next;
end;
if a4= then a2:=a2+a5;
a1:=a1+;
b[x,]:=a1;b[x,]:=a2;b[x,]:=a3;
end;
begin
readln(n);
for i:= to n do a[i]:=nil;
for i:= to n- do
begin
readln(j,k);
add(j,k);add(k,j);
end;
fillchar(c,sizeof(c),);
fillchar(b,sizeof(b),);
dp();
writeln(min(b[,],b[,]));
readln;
end.

1596: [Usaco2008 Jan]电话网络的更多相关文章

  1. 【BZOJ】1596: [Usaco2008 Jan]电话网络(树形dp+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1596 一开始交了个貌似正确的dp,wa了. 我只考虑了儿子覆盖的情况,没有考虑父亲QAQ 那么我们要 ...

  2. BZOJ 1596: [Usaco2008 Jan]电话网络

    Description Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无 ...

  3. 【BZOJ】1596: [Usaco2008 Jan]电话网络

    [算法]树上贪心 [题解] 因为一个点必须被覆盖,那么它如果没有被子树节点覆盖的话,就覆盖它的父节点. 从叶子开始贪心. 注意,如果它自己已经被选了就不需要选父节点了. #include<cst ...

  4. bzoj 1596: [Usaco2008 Jan]电话网络【贪心】

    dfs,如果一个点的儿子.本身.父亲都没有塔,就在父亲上建一个 原理不明-- #include<iostream> #include<cstdio> using namespa ...

  5. BZOJ 1596: [Usaco2008 Jan]电话网络 树形DP

    挺经典的,细节需要特别注意一下 Code: #include<bits/stdc++.h> using namespace std; #define setIO(s) freopen(s& ...

  6. BZOJ1596: [Usaco2008 Jan]电话网络

    1596: [Usaco2008 Jan]电话网络 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 513  Solved: 232[Submit][S ...

  7. 【bzoj1596】[Usaco2008 Jan]电话网络

    题目描述 Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无线电通讯塔,来 ...

  8. 【bzoj1596】[Usaco2008 Jan]电话网络 树形dp

    题目描述 Farmer John决定为他的所有奶牛都配备手机,以此鼓励她们互相交流.不过,为此FJ必须在奶牛们居住的N(1 <= N <= 10,000)块草地中选一些建上无线电通讯塔,来 ...

  9. BZOJ1596 [Usaco2008 Jan]电话网络 【树形dp】

    题目链接 BZOJ1596 题解 先抽成有根树 设\(f[i][0|1][0|1]\)表示以\(i\)为根,儿子都覆盖了,父亲是否覆盖,父亲是否建塔的最少建塔数 转移一下即可 #include< ...

随机推荐

  1. HDU1172(枚举)

    猜数字 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  2. iOS开发中@property的属性weak nonatomic strong readonly等介绍

    @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后的版本,@synthesize可以省略. 1.atomic与nonatomica ...

  3. Hadoop权威指南:HDFS-Hadoop存档

    Hadoop权威指南:HDFS-Hadoop存档 [TOC] 每个文件按块方式存储, 每个块的元数据存储在namenode的内存中 Hadoop存档文件或HAR文件是一个更高效的文件存档工具,它将文件 ...

  4. Accessibility辅助功能--一念天堂,一念地狱

    0x00什么是Accessibility(辅助功能) 考虑到部分用户不能很好地使用Android设备,比如由于视力.身体.年龄方面的限制,造成阅读内容.触控操作.声音信息等方面的获取困难,Androi ...

  5. java_XML_Dom4j

    一.DOM4j中,获得Document对象的方式有三种: 1.读取XML文件,获得document对象 SAXReader reader = new SAXReader(); Document doc ...

  6. 开放才能进步!Angular和Wijmo一起走过的日子

    Angular 已成为广受欢迎的前端框架.去年9月份,期待已久的 Angular2 的正式版发布之后,Angular 又迎来了新一轮热潮.伴随着 Angular 这一路走来,Wijmo 一直都是第一个 ...

  7. iOS 创建OpenGL 环境的思考

    关于如何从头开始创建环境,可以参考大神的博文OpenGL ES 3.0 数据可视化 0:Hello world,本文只是补充一些我在实践中的一些思考. CAEAGLLayer If you plan ...

  8. ABP框架 - 嵌入资源

    文档目录 本节内容: 简介 创建嵌入文件 xproj/project.json 格式 csproj 格式 添加到嵌入式资源管理器 使用嵌入式视图 使用嵌入式资源 ASP.NET Core 配置 忽略文 ...

  9. MVC中登录页图片验证码总结

    直接上代码了 using System;using System.Collections.Generic;using System.Drawing;using System.Drawing.Imagi ...

  10. JavaScript中几个相似方法对比

    一.substring与substr   substring substr 概述 返回字符串两个索引之间(或到字符串末尾)的子串 返回字符串从指定位置开始到指定长度的子串 语法 参数 indexSta ...