洛谷 P2279 03湖南 消防局的设立】的更多相关文章

2016-05-30 16:18:17 题目链接: 洛谷 P2279 03湖南 消防局的设立 题目大意: 给定一棵树,选定一个节点的集合,使得所有点都与集合中的点的距离在2以内 解法1: 贪心 首先DFS转化为有根树,每次取最深节点的爷爷进入集合 //消防局的设立 03湖南 //贪心 #include<stdio.h> #include<algorithm> using namespace std; ; struct node { int deep; int id; }; node…
消防局的设立 题目链接 贪心:每次取出深度最大的节点,若没有被覆盖到,要想覆盖它, 最优的做法显然是将它的爷爷设为消防局 (因为该节点深度为最大,选兄弟.父亲所覆盖的节点,选了爷爷后都能够覆盖) 用优先队列维护深度即可 #include<iostream> #include<cstring> #include<cstdio> #include<queue> using namespace std; #define INF 100000 #define N 1…
题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有\(n\)个基地.起初为了节约材料,人类只修建了\(n-1\)条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状结构.如果基地\(A\)到基地\(B\)至少要经过\(d\)条道路的话,我们称基地\(A\)到基地\(B\)的距离为\(d\). 由于火星上非常干燥,经常引发火灾,人类决定在火星上修建若干个消防局.消防局只能修建在基地里,每个消防局有能力扑灭与它距离不超过\(2\)的基地的火灾. 你…
点此看题面 大致题意: 给你\(N\)个点(其中\(1\)号点为根),并告诉你编号为\(2\sim N\)的点的父亲(\(fa[i]<i\)),现在要在树上选择尽量少的关键点(消防局),使得任意一个点到离它最近的关键点(有可能是它自己)的距离不超过\(2\),求最少选择的点数. 考虑贪心 很显然,这是一道贪心题. 我们可以将这棵树的节点按照\(BFS\)序依次压入栈中(因为这样可以确保先放入的元素深度小).每次取出栈顶的元素,若它没有被打过标记它周围距离不超过\(2\)的点中有消防局,就说明要建…
一看到这道题就知道是树形dp 之前做过类似的题,只不过保护的范围是1 所以简单很多. 这道题保护的范围是2,就复杂了很多. 我就开始列状态,然后发现竟然有5种 然后我就开始列方程. 但是我考虑的时候是用一条链去思考的. 显然应该要用深度为3的完全二叉树去思考. 所以我写到一半发现自己的方程有问题. 然后就干脆放弃了,因为思维量好大. 然后去看题解.发现我完成了正解的三分之一. 后面的方程写出之后还需要很牛逼的简化. 我花了很长时间才理解. 自己还是太菜了.http://www.cnblogs.c…
题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状结构.如果基地A到基地B至少要经过d条道路的话,我们称基地A到基地B的距离为d. 由于火星上非常干燥,经常引发火灾,人类决定在火星上修建若干个消防局.消防局只能修建在基地里,每个消防局有能力扑灭与它距离不超过2的基地的火灾. 你的任务是计算至少要修建多少个消防局才能够确保火星上所有的基地在发生火灾时…
题目描述 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了一个巨大的树状结构.如果基地A到基地B至少要经过d条道路的话,我们称基地A到基地B的距离为d. 由于火星上非常干燥,经常引发火灾,人类决定在火星上修建若干个消防局.消防局只能修建在基地里,每个消防局有能力扑灭与它距离不超过2的基地的火灾. 你的任务是计算至少要修建多少个消防局才能够确保火星上所有的基地在发生火灾时…
每日一题 day34 打卡 Analysis 这道题的正解本来是树形dp,但要设5个状态,太麻烦了.于是我就用贪心试图做出此题,没想到还真做出来了. 考虑当前深度最大的叶子结点,你肯定要有一个消防局去覆盖它, 那么既然他是叶子结点,所以与他距离小于等于2的节点有这么 他的父亲 2. 他的兄弟 3. 他的爷爷 容易看出,在前两项能够覆盖到的节点,在爷爷那里设立一定也能覆盖到. 所以每次贪心取出深度最大的节点,在他的爷爷哪里放一个消防站 用STL的priority_queue,时间复杂度O(nlog…
正解:贪心 解题报告: 传送门! 这题贪心得挺显然的,,,?居然能有蓝,,,是蓝题太水了嘛,,,? 简单说下,这题一看到就能想到,对最低的没被覆盖到的点给它的祖父建一个消防局 没了? 哦这题实现还挺有趣的感觉 最简单的实现就是用个dfs或堆什么的走一波 然后比较高级的一个是边读边贪心?一个是不用贪心强行dp?到时候具体写下实现趴QAQ over 边读边贪心就很简单啊,,,因为读一下题目可以知道它读入的是fa[i],所以可以在读入的时候直接处理出deep顺便排个序,然后就直接做了,就可以不要用堆…
题目:https://www.luogu.org/problemnew/show/P2279 题意:一棵树.在节点处建消防站,可以覆盖与他距离在2之内的节点.问最少要建多少个消防站,可以覆盖所有的节点. 思路:有一种贪心的思路,看大部分题解都是这样. 如果要覆盖当前节点(自己不建),那么可能是父亲,兄弟,祖父建了. 但是我们发现,在祖父建覆盖的范围比父亲兄弟要更广一些.所以就贪心的取深度最深的节点,在他的祖父处建一个. 因为想练dp所以没写贪心的. 看结构感觉是树形dp.$dp[i]$表示以$i…