题目链接:点击打开链接

题意:n台机器连成一个树状网络,其中叶节点是客户端,其他节点是服务器,目前有一台服务器s正在提供服务。让你在其他服务器上也安排同样的服务,使得每台客户端到最近服务器的距离不超过k,而且要使服务器尽量少,问最少要设置多少台服务器。

思路:我们先把s看做根节点,做一遍dfs,把离s距离小于等于k的叶子节点标为访问过,表示这个叶子节点已经得到服务了,然后再把没有访问过的叶子节点按深度从大到小排序,每次找到深度最大的点,在它的k倍祖先上放服务器,然后dfs一遍,把离它距离不超过k的叶子节点都标为访问过。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<string>
#include<bitset>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double ldb;
#define inf 99999999
#define pi acos(-1.0)
#define maxn 1005
#define MOD 1000000009
vector<int>vec[maxn];
vector<int>deep[maxn];
vector<int>::iterator it;
int vis[maxn],fa[maxn];
int k;void dfs(int u,int pre,int dep)
{int i,j,flag=0;fa[u]=pre;if(dep+1<=k+1)vis[u]=1;for(i=0;i<vec[u].size();i++){int v=vec[u][i];if(v!=pre){flag=1;dfs(v,u,dep+1);}}if(!flag)deep[dep+1].push_back(u);}void dfs2(int u,int pre,int num)
{int i,j;vis[u]=1;if(num==k)return;for(i=0;i<vec[u].size();i++){int v=vec[u][i];if(v!=pre){dfs2(v,u,num+1);}}
}int main()
{int n,m,i,j,T,s,c,d,h;scanf("%d",&T);while(T--){scanf("%d",&n);scanf("%d%d",&s,&k);for(i=1;i<=1003;i++){vec[i].clear();deep[i].clear();}memset(fa,0,sizeof(fa));memset(vis,0,sizeof(vis));for(i=1;i<=n-1;i++){scanf("%d%d",&c,&d);vec[c].push_back(d);vec[d].push_back(c);}dfs(s,0,0);int cnt=0;for(h=n;h>k+1;h--){for(i=0;i<deep[h].size();i++){if(vis[deep[h][i] ])continue;int jiedian=deep[h][i];for(j=1;j<=k;j++){jiedian=fa[jiedian];}cnt++;dfs2(jiedian,-1,0);}}printf("%d\n",cnt);}return 0;
}/*
100
10
1 1
1 2
1 3
1 4
2 5
2 6
3 7
3 8
5 9
5 10
*/

转载于:https://www.cnblogs.com/herumw/p/9464500.html

LA3902 Network (树上dfs)相关推荐

  1. Kuro and Walking Route CodeForces - 979C (树上DFS)

    Kuro is living in a country called Uberland, consisting of nn towns, numbered from 11to nn, and n−1n ...

  2. 【牛客每日一题】4.15 Treepath 题解(树上dfs/树形DP)

    题目链接:https://ac.nowcoder.com/acm/problem/14248 来源:牛客网 题目描述 给定一棵n个点的树,问其中有多少条长度为偶数的路径.路径的长度为经过的边的条数.x ...

  3. POJ - 3417 Network(树上差分)

    题目链接:点击查看 题目大意:(摘自大蓝书)Dark是人类内心的黑暗的产物,古今中外的勇者们都试图打倒它.经过研究,你发现Dark呈现无向图的结构,图中有N个节点和两类边,一类边被称为主要边,而另一类 ...

  4. 2021 ICPC Southeastern Europe Regional Contest 树上dfs+思维

    |–>传送门<–| 题目大意 给定一颗nnn个节点的树,可以从任意一个点开始dfsdfsdfs,求最小字典序的后续遍历. 题解 首先,对于字典序最小的要求,我们一定是从叶结点中的最小值开始 ...

  5. CF163E e-Government(ACAM fail树上dfs序)

    LINK 假如没有删除添加操作,那么就是一个ACACAC自动机的板题 把所有字符串集合建立ACAMACAMACAM 然后对于每个询问串,设询问串在tiretiretire树上的uuu节点 那我们可以对 ...

  6. 《算法竞赛入门经典——训练指南》第一章相关内容

    #<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...

  7. 牛客网【每日一题】Shortest Path 4月3日题目精讲 DFS

    题号 NC13886 Shortest Path 西南交通大学第十三届ACM决赛 题意: 一棵偶数节点的树,分成n/2对,两两一组,所有组的路径之和最小是多少? 题解: 如果两个点之间相连将另外两个相 ...

  8. 2017 西安网络赛A Tree(树上静态查询,带权并查集,矩阵乘法压位,好题)

    题目链接 题意: 给出 \(n(n \leq 3000)\) 个结点的一棵树,树上每个结点有一个 \(64 \times 64\) 的 \(0,1\)矩阵,每个结点上的矩阵是根据输入的 \(seed\ ...

  9. 树上连通有关背包:【BZOJ4182】shopping 【HDU6566】The Hanged Man

    选这两道题是因为这两道题都是树上背包,而且选的点的要求都与连通性有关,而且都是按 dfs 序 DP 来模拟不断加入物品,而且都能用树剖和点分治优化(不过优化的点一个跟子树大小有关一个跟深度有关),比较 ...

最新文章

  1. MT to Death,专访 ACL Fellow刘群,一个NLPer的极致表白
  2. 牛客网暑期ACM多校训练营(第一场)J Different Integers
  3. 远程接入-天翼5系统让ERP穿越时空!
  4. transition属性定义动画
  5. lamda 对比两个list_正式支持多线程!Redis 6.0与老版性能对比评测
  6. 数据结构之栈与递归的应用(八皇后递归解法)
  7. bigsur正式版clover引导_【微信首发】macOS Catalina 10.15.6 19G2021 正式版 Clover/OC/PE三分区原版镜像...
  8. iframe高度自适应的实现
  9. 二分查找法(Java实现)
  10. java8 stream 多个_java8 stream两个集体交集、差集、并集操作
  11. Security+ 学习笔记1 恶意软件
  12. Qt_MinGW编译二维码生成库Zint及使用
  13. 农夫山泉市值超5000亿港元 域名还在优化中?
  14. Linux使用Java将C++程序发布为webservice(wsdl)
  15. matlab db dbm dbfs,dbfs(dbfs和dbm的换算)
  16. VisionPro和Halcon 的详细对比
  17. 使用markdown玩转代码架构设计
  18. C#中Guid.ToString (String)五种格式,以及将32位的GUID转为16位及其他格式
  19. Commonly Used Afx Functions
  20. 叶子云桌面虚拟化解决方案100-200用户

热门文章

  1. 1.3 计划需求控制
  2. hibernate详解
  3. Palm pre,我的M8又要落伍了
  4. Linu20180415三周第三次课(4月4日)
  5. 如何改android device monitor文件的权限
  6. 克莱门特公司在俄罗斯一个数据中心安装其新型冷却系统
  7. MairaDB 函数(一)
  8. iOS开发者有价值的工具集
  9. 异构云:另一个烫手的山芋
  10. Object_Type列表