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上建通讯塔。
思路:本题为动态规划,dp[i][0]表示以i为根的子树最少需要放几个,同时i的父亲没有放。
dp[i][1]表示以i为根的子树最少需要放几个,同时i父亲没有放,但是已经被关联。
dp[i][2]表示以i为根的字数最少需要放几个,并且i的父亲已经放了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define R  register int
 4 #define rep(i,a,b) for(R i=a;i<=b;i++)
 5 #define Rep(i,a,b) for(R i=a;i>=b;i--)
 6 #define rp(i,x)    for(R i=H[x];i!=-1;i=E[i].nt)
 7 #define ms(i,a)    memset(a,i,sizeof(a))
 8 template<class T>void read(T &x){
 9   x=0; char c=0;
10   while (!isdigit(c)) c=getchar();
11   while (isdigit(c)) x=x*10+(c^48),c=getchar();
12 }
13 int const N=10000+3;
14 int const inf=1e8;
15 struct Edge{
16   int to,nt;
17 }E[N<<1];
18 int n,cnt,dp[N][3],H[N];
19 void add(int a,int b){
20   E[cnt]=(Edge){b,H[a]}; H[a]=cnt++;
21 }
22 void dfs(int x,int fa){
23   int s1=0,s2=0;
24   rp(i,x){
25     int v=E[i].to;
26     if(v==fa) continue;
27     dfs(v,x);
28     s1+=dp[v][1];
29     s2+=dp[v][2];
30   }
31   dp[x][0]=1+s2;
32   dp[x][1]=1+s2;
33   rp(i,x){
34     int v=E[i].to;
35     if(v==fa) continue;
36     dp[x][1]=min(dp[x][1],s1-dp[v][1]+dp[v][0]);
37   }
38   dp[x][2]=min(1+s2,s1);
39 }
40 int main(){
41   read(n);
42   ms(-1,H);
43   rep(i,1,n-1){
44     int x,y; read(x);read(y); add(x,y); add(y,x);
45   }
46   dfs(1,1);
47   printf("%d\n",dp[1][1]);
48   return 0;
49 }

View Code

转载于:https://www.cnblogs.com/ZJXXCN/p/10208424.html

bzoj 1596 电话网络相关推荐

  1. Bzoj 1596: [Usaco2008 Jan]电话网络

    原题网址:http://www.lydsy.com/JudgeOnline/problem.php?id=1596 有点像"没有上司的舞会",但因为两座塔可以距离最多为3,所以要记 ...

  2. bzoj 1614 Telephone Lines架设电话线 - 二分答案 - 最短路

    Description Farmer John打算将电话线引到自己的农场,但电信公司并不打算为他提供免费服务.于是,FJ必须为此向电信公司支付一定的费用. FJ的农场周围分布着N(1 <= N ...

  3. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  4. 两台计算机通过传统电话网络,计算机网络的复习题.doc

    计算机网络的复习题 第2章 计算机网络的层次化结构 填空题 ? 开放系统互连参考模型(OSI模型)从底层往高层共分为_______._______.______.传输层.会话层.表示层和应用层七个层次 ...

  5. S-T平面图中利用最短路求最小割(BZOJ 1001)

    BZOJ 1001: [BeiJing2006]狼抓兔子 最小割 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢 ...

  6. BZOJ 1124: [POI2008]枪战Maf(构造 + 贪心)

    题意 有 \(n\) 个人,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪. 因此,对于不同的开枪顺序,最后死的人也不同. 问最 ...

  7. BZOJ 2957楼房重建

    传送门 线段树 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include< ...

  8. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

    BZOJ LOJ 洛谷 \(d_i\)不同就不用说了,建出树来\(DFS\)一遍. 对于\(d_i\)不同的情况: Solution 1: xxy tql! 考虑如何把这些数依次填到树里. 首先对于已 ...

  9. bzoj 4871: [Shoi2017]摧毁“树状图”

    4871: [Shoi2017]摧毁"树状图" Time Limit: 25 Sec  Memory Limit: 512 MB Submit: 53  Solved: 9 [Su ...

最新文章

  1. 【OpenCV 4开发详解】图像连通域分析
  2. java url 拦截_Spring mvc设置某些url不被interceptor拦截器拦截的方法
  3. iOS开发之抽屉效果实现
  4. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习
  5. hdu 1272 小希的迷宫 (并查集)
  6. 《文献管理与信息分析》课程学习笔记
  7. canny边缘检测算法 opencv_OpenCV-Python Canny边缘检测 | 十九
  8. 为什么要学习汇编语言?如何正确学习汇编语言?
  9. Hadoop生态圈介绍
  10. 欧盟将推出自己的互联网扩展域名
  11. vue-cli入门之项目结构分析
  12. matlab课后习题,Matlab 课后习题集
  13. java分布式开发流程,面试建议
  14. 计算机应用u盘解释,U盘速度测试和参数解释
  15. ant design——Modal
  16. 注册Google的步骤
  17. 学习理论:理论联系实际--演绎归纳演绎
  18. 初创公司需不需要产品经理?
  19. 坚持写博客,以身说法——我与CSDN的1234
  20. 基于Unity的VR迷宫游戏项目技术分享

热门文章

  1. cesium 页面截图_Cesium开发入门篇 | 02开发环境搭建及第一个示例
  2. python特征匹配 查找_特征匹配+单纯形查找对象
  3. react 网易云音乐实战项目笔记
  4. LeetCode MySQL 1661. 每台机器的进程平均运行时间
  5. Scala 入门3(类、Trait、模式匹配、正则、异常、提取器、IO)
  6. MapReduce 编程实践:统计对象中的某些属性
  7. LeetCode 421. 数组中两个数的最大异或值(Trie树)
  8. 一建机电实务教材电子版_2020一建教材+章节习题+新旧教材对比【全科】免费送...
  9. 拦截游戏窗口被移动_Ruined King官网版-拳头rpg Ruined King游戏最新版下载v1.0
  10. 给准保研生/调剂生的几个简历制作的建议