uva1267 - Network
2016-02-02 14:24
441 查看
题意:r
一个编号1~n的n个结点的树状网络,其中间结点称服务器,叶子节点称客户端,从编号s的终端服务器开始可以将网络扩散k条边给客户端,除终端服务器外的服务器可任意设置,使其也可扩散k条边至客户端,问至少要设置多少个这样的服务器才能让所有客户端都可以接收到网络。
思路:
这题是从叶节点倒着遍历整棵树的,f[i]存i的父节点,g[i][j]则存第k层后的第i层的叶子,用两个dfs和solve函数解决,其作用见代码中的注释,在此不做补充。
代码:
一个编号1~n的n个结点的树状网络,其中间结点称服务器,叶子节点称客户端,从编号s的终端服务器开始可以将网络扩散k条边给客户端,除终端服务器外的服务器可任意设置,使其也可扩散k条边至客户端,问至少要设置多少个这样的服务器才能让所有客户端都可以接收到网络。
思路:
这题是从叶节点倒着遍历整棵树的,f[i]存i的父节点,g[i][j]则存第k层后的第i层的叶子,用两个dfs和solve函数解决,其作用见代码中的注释,在此不做补充。
代码:
#include <iostream> #include <cstdio> #include <vector> #include <cstring> #include <algorithm> using namespace std; const int N = 1005; int n, s, k; vector <int> ege[N]; vector <int> g[N]; int cover[N]; int f[N]; void init() { scanf("%d%d%d", &n, &s, &k); int i, a, b; for (i = 0; i <= n; i++) {//漏了个‘=’,RE了,虐死哥了T_T ege[i].clear(); g[i].clear(); } for (i = 1; i < n; i++) { scanf("%d%d", &a, &b); ege[a].push_back(b); ege[b].push_back(a); } } void dfs(int u, int pre, int d) {//在f[]存父亲,在g[][]存第k层后各层的叶子 f[u] = pre; int sz = ege[u].size(),v; if (sz == 1 && d > k){ g[d].push_back(u); } for (int i = 0; i <sz; i++) { v = ege[u][i]; if (v == pre) continue; dfs(v, u, d + 1); } } void dfs2(int u, int pre, int d) {//覆盖叶子 cover[u] = 1; int sz = ege[u].size(); int i,v=0; for (i = 0; i < sz; i++) { v = ege[u][i]; if (v == pre) continue; if(d < k) dfs2(v,u,d+1); } } int solve() { dfs(s, -1, 0); memset(cover, 0, sizeof(cover)); //开始建复制服务器 int i, j, c, ans = 0; for (i = n - 1; i > k; i--) { int sz = g[i].size(); for (j = 0; j < sz; j++) { int u = g[i][j]; if (cover[u]) continue; int v = u; for (c = 0; c < k; c++) v = f[v]; dfs2(v, -1, 0); ans++; } } return ans; } int main() { int cas; scanf("%d",&cas); while (cas--) { init(); printf("%d\n",solve()); } return 0; }
相关文章推荐
- 在listView适配器的内存优化给点击事件带来的麻烦
- [树状数组+上升子序列] HDU 3030 Increasing Speed Limits
- 【SCOI2013】【BZOJ3323】多项式的运算
- 四面体体积求法
- 视频播放的基本原理
- Linux Shell常用技巧(五) awk编程
- windows下用Eclipse编译运行android原生浏览器
- Android官方数据绑定框架DataBinding
- Rx-Volley 自己来封装
- mybatis 生成dao、entity、mapping文件
- Windows + IDEA + SBT 打造Spark源码阅读环境
- 工作中一定用的到的小知识点
- HashMap
- Linux Shell常用技巧(四) awk
- 谈谈visual studio QTCreator eclipse的远程调试
- Qt(12):画笔,画刷,反走样以及渐变
- app引导页
- poj2488 DFS基础
- 时钟初始化flash设置
- 最喜欢的算法(们) - Levenshtein distance