题目大意:给你一棵边权为1的树,让你加入一些边,使得根节点(1号节点)到其他节点的最短距离不大于2 并没有想到贪心...... 正解的贪心思路是这样的 用一个堆维护当前距离最远的点,然后把根节点和它的父节点连起来 这样,父节点周围一圈的节点到根的距离都不大于2,把这些节点都从堆里删除 实际操作的时候,并不需要删除它们,只需要把它们标记一下,等它们弹出堆的时候,continue即可 不断按照这个思路贪心,直到所有节点到根的距离都不大于2即可 #include <set> #include <…
题目描述 给定一棵树.要求往树中加入一些边使得从1到其他节点的距离至多是2 . 输出加入边的最小数量.(边全部都是无向的) 题解:好多人都说是贪心,但是我写的是树形dp. (这道题实在太像小胖守皇宫了) 先贪一步,每条边都由1连出,另一端距离为1.因此可以更新其父亲和儿子. dp[ u ][ 0 / 1 / 2]:u点由自己/儿子/父亲更新. 代码: #include<cstdio> #include<cstring> #include<algorithm> using…
E - Cell Phone Network POJ - 3659 题目大意: 给你一棵树,放置灯塔,每一个节点可以覆盖的范围是这个节点的所有子节点和他的父亲节点,问要使得所有的节点被覆盖的最少灯塔数量. 考虑每一个节点要被覆盖应该如何放置灯塔. 如果一个节点被覆盖 1 该节点放了灯塔  2 该点的父亲节点放了灯塔  3 该点的儿子节点放了灯塔. dp[u][0] 表示这个节点的儿子节点放了灯塔 dp[u][1] 表示这个点本身放了灯塔 dp[u][2] 表示这个点的父亲节点放了灯塔 转移方程,…
Description 给定一棵树.要求往树中加入一些边使得从1到其他节点的距离至多是2 . 输出加入边的最小数量.(边全部都是无向的) Input 第一行一个整数n,表示树中的节点个数. 接下来n−1行,每行两个整数x,y,表示x,y之间有一条连边. Output 输出一个整数,表示加入边的最小数量. 贪心做法, 我们每次选择深度最深的点,向其父节点加边来标记其他点.(到达这些点的距离都不超过\(2\).) 为什么向其父亲节点加边?因为这样会覆盖比较多的点. 如果遇到被标记的点,就\(cont…
You are given an undirected tree consisting of \(n\) vertices. An undirected tree is a connected undirected graph with \(n−1\) edges. Your task is to add the minimum number of edges in such a way that the length of the shortest path from the vertex 1…
题意: 这是一颗有n-1条边的无向树 , 在树上加最少的边使树的1节点到其他节点的距离最多为 2 : 分析:很容易考虑的贪心的做法,但是该如何的贪心呢 ? 我一开始是打算贪心节点的儿子最多那一个 , 但这样是不行的,举个反例子例:1-2 : 2-3 : 3-4 : 3-5 : 3-6 : 3-7 : 4-8 : 4-9 : 5-10 : 5-11 : 6-12 : 6-13 : 7-14 : 7-15 : 可自己做出图,按这样的贪心出来的结果是5 : 结果是4,所以这样的贪心是不行的 : 我们在…
题目:戳这里 学习博客:戳这里 题意:给一个树加最少的边,使得1到所有点的距离小于等于2. 解题思路:分析样例3可以看出,如果一个点到1的距离大于2,那么建立1到该点的父亲节点的边将比直接与该点建边更优.官方题解的做法是把所有与1距离大于2的点放到大顶堆里维护,每次取出最远的点,染色与该点父节点以及与父节点相接的所有点.也就是相当于与父节点建边,距离为1,与父节点的子节点的距离就为2了,于是把这些点弹出.从大佬博客中学到一个很妙的写法,是用dfs实现这个思路,具体看代码. 附ac代码: 1 #i…
昨晚随便玩玩搞个div3结果浪翻了…… 强烈谴责D题hack数据卡常 考虑到本题中所要求的最短距离不会大于2,所以我们可以把所有结点到$1$的距离通过对$3$取模分类,考虑到直接自顶向下贪心不满足局部最优解可以推出全局最优解,所以我们可以自下向上这样可以考虑到所有条件.我们处理出一个结点$x$所有儿子$y$的取模后的距离的最小值$dis$,那么一个结点向$1$连一条边的充要条件就是: $dis == 0 && x != 1 && fa != 1$ 时间复杂度$O(n)$.…
题目直通车:http://codeforces.com/problemset/problem/1029/E 思路大意:在树上做dp,依次更新ar数组,ar[i]表示以i为根节点的子树对答案的最小贡献值,依次更新即可,具体细节见代码 /* 13 1 2 1 3 1 4 4 5 4 6 4 7 7 8 7 9 7 10 10 11 10 12 10 13 output:2 */ #include<iostream> #include<cstdio> #include<cmath&…
Codeforces Round #506 (Div. 3) (中等难度) 自己的做题速度大概只尝试了D题,不过TLE D. Concatenated Multiples 题意 数组a[],长度n,给一个数k,求满足条件的(i,j)(i!=j) a[i],a[j]连起来就可以整除k 连起来的意思是 20,5连起来时205; 5,20连起来时520 n<=2*1e5,k<=1e9,ai<=1e9 愚蠢的思路是像我一样遍历(i,j)可能性,然后TLE,因为这是O(n^2) 可以先思考一简单问…