51nod 1314 定位系统
来源:互联网 发布:windows启动过程与unix 编辑:程序博客网 时间:2024/05/05 21:33
题意
一个国家有N个城市(标号为0~N-1),这N个城市恰好由N-1条道路连接在一起(即N个城市正好构成一个树状结构)。这个国家的所有道路的长度都是1个长度单位。定义:两个城市间的距离是两个城市间的最短路的长度。
现在这个国家想建立一套定位系统,让国家的公民能通过这套系统定位自己所在的城市。该系统由K个有编号的信号站构成,不妨将它们标号为0,1,2,3,…,K-1。每个信号站会放在一个城市中,每个城市最多安放一个信号站,每个信号站将不停的向外界发送信。(值得注意的是,信号站i不一定要安放在城市i中,例如:信号站2可以放在城市3中,也可以放城市4中)对于一个公民来说,如果他在城市X,那么他打开手机定位时,手机将收集K个信号站的信号,并根据这些信息生成一个K个元素的数组Dis[],其中Dis[i]记录着信号站i所在的城市与手机用户所在的城市(这里即为城市X)的距离。手机中的定位软件将根据该Dis[]数组来判断用户所在的城市编号。
由于信号站成本太高,该国家想尽可能少的购买信号站,那么问题来了,该国家最少需要安装多少个信号站才能唯一定位每一个城市?
友情提示:每个城市能被唯一定位的充要条件是,在每一个城市手机能接收到的数组Dis[]是互不相同的。
1<=N<=50
分析
首先枚举每一个点作为根,也就表示一定要放该点。
在该点放了信号站以后,注意到如果在它的某一个子树里面放一个信号站,是影响不到其他子树内部的,但可以使这棵子树和其他子树分开。那么我至少要在d-1棵子树里面有信号站。d表示儿子数量。
我们就设solve(x,y)表示在以x为根的子树里面至少放y个信号站且把x的内部全部分开所需要的最少信号站。
然后再根据上面的策略往下dp即可。
代码
#include <bits/stdc++.h>const int N = 1005;struct Edge{ int to,next;}e[N];int next[N];int cnt;void add(int x,int y){ e[++cnt].to = y, e[cnt].next = next[x]; next[x] = cnt;}int f[N],t[N];void dfs(int x,int fa){ f[x] = t[x] = 0; int d = 0; for (int i = next[x]; i; i = e[i].next) { int v = e[i].to; if (v == fa) continue; if (!t[x]) t[x] = 1; else t[x] = 2; dfs(v, x); f[x] += f[v]; if (t[v] <= 1) d = 1; else t[x] = 2; } if (t[x] >= 2) f[x] -= d; else if (!t[x]) f[x] = 1;}char s[N];int main(){ int n; scanf("%d",&n); if (n == 1) { printf("0"); return 0; } for (int i = 1; i <= n; i++) { scanf("%s",s + 1); for (int j = 1; j <= n; j++) { if (s[j] == 'Y') add(i,j); } } int ans = 1 << 30; for (int i = 1; i <= n; i++) { dfs(i,0); int hh = f[i] + (t[i] == 2); ans = std::min(ans,hh); } printf("%d",ans);}
- 51nod 1314 定位系统
- 51nod 1314 定位系统 树形dp
- 51Nod-1552-白兰地定位系统
- 51nod 1491 黄金系统
- 51Nod-1491-黄金系统
- 51nod 1491 黄金系统
- 51nod 1491 黄金系统
- 51 nod 1491 黄金系统(贡献)
- 定位系统
- 定位系统
- 系统定位
- 系统定位
- 51nod 1491-黄金系统(数论->递推)
- 51Nod
- 51Nod
- 51nod
- 51Nod
- 51Nod
- linux c 定时器
- AndroidStudio的mainframe里的权限总结
- java 网络 之 域名解析InetAddress
- CSDN-markdown编辑器使用
- 快速执行linux/Mac历史命令
- 51nod 1314 定位系统
- 回调方法的使用
- 阈值操作
- ftp服务
- 11.笔记JAVA Spring框架学习————Bean作用域
- 山外KL26的J-link连接与程序下载
- 简单递归,汉诺塔问题以及兔子繁殖问题
- 详述 iTerm2 配色及免密登录 SSH 的方法
- uboot内容总结