题意:求用最少的链覆盖所有的边用最少的总链长度。

思路:为了使得使用的链最少,我们可以知道使用的数量应该是(子叶 + 1)/ 2。 画图可知:当节点下的边数是偶数时,为了将该父节点上的边给连接上,所以连接该父节点的边需要2条,其他情况都是1条。但是当图中总的子叶数量为奇数时我们可以发现我们有一个可以选择变化的点这样以来我们就可以减少使用的总数量了。然后发现把目标点放我们把偶数节上可以减少使用的数量1,但是当你要把那个节点放在奇数点的下面的时候需要耗费1来使得同一层的边连接进来。

#include <bits/stdc++.h>
using namespace std; const int maxn = 1e5 + ;
vector<int>Gra[maxn];
int son[maxn], leaf, ans, aert; void dfs(int u, int no){
son[u] = ;
for(auto v : Gra[u]){
if(v == no) continue;
dfs(v, u);
son[u] += son[v];
ans += (son[v]&) ? : ;
}
if(!son[u]) son[u] = ,leaf ++;
} void dfsaert(int u, int no, int cnt){
aert = max(aert, cnt);
for(auto v : Gra[u])
if(v != no) dfsaert(v, u, cnt + (son[v]& ? - : ));
} int main(){
int T, n, a, b;scanf("%d", &T);
while( T -- ){
scanf("%d", &n);
for(int i = ; i <= n; i ++) Gra[i].clear();
for(int i = ; i < n; i ++){
scanf("%d%d", &a, &b);
Gra[a].push_back(b);
Gra[b].push_back(a);
}
aert = ans = leaf = ;dfs(, );
if(Gra[].size() == ) leaf ++;
if(leaf & )
dfsaert(, , );
printf("%d\n", ans - aert);
}
return ;
}

Explorer Bo (思维 + 树链剖分)的更多相关文章

  1. CSUST 2012 一个顶俩 (本校OJ题)(思维+树链剖分)

    (点击这里查看原题,不保证可以进去....外网可能比较卡) Description A:一心一意 B:一个顶俩 最近QQ更新后那个成语接龙好像挺火的?但我只知道图论里一条边是一个顶俩个点的emm. 如 ...

  2. [HDU3710] Battle Over Cities [树链剖分+线段树+并查集+kruskal+思维]

    题面 一句话题意: 给定一张 N 个点, M 条边的无向连通图, 每条边上有边权 w . 求删去任意一个点后的最小生成树的边权之和. 思路 首先肯定要$kruskal$一下 考虑$MST$里面去掉一个 ...

  3. BZOJ 1146: [CTSC2008]网络管理Network( 树链剖分 + 树状数组套主席树 )

    树链剖分完就成了一道主席树裸题了, 每次树链剖分找出相应区间然后用BIT+(可持久化)权值线段树就可以完成计数. 但是空间问题很严重....在修改时不必要的就不要新建, 直接修改原来的..详见代码. ...

  4. 3553: [Shoi2014]三叉神经树(树链剖分)

    这道题特别恶心,首先我们可以发现更改的就是出现连续的一或二,那么就用线段树+树链剖分找到这个范围 想到是不难想,就是打起来恶心罢了= = CODE: #include<cstdio> #i ...

  5. BZOJ 3083: 遥远的国度(树链剖分+DFS序)

    可以很显而易见的看出,修改就是树链剖分,而询问就是在dfs出的线段树里查询最小值,但由于这道题会修改根节点,所以在查询的时候需判断x是否为root的祖先,如果不是就直接做,是的话应该查询从1-st[y ...

  6. bzoj4326 树链剖分 + 线段树 // 二分 lca + 树上差分

    https://www.lydsy.com/JudgeOnline/problem.php?id=4326 题意:N个点的树上给M条树链,问去掉一条边的权值之后所有树链长度和的最大值最小是多少. 首先 ...

  7. 树链剖分【p4116】Qtree3 - Query on a tree

    Description 给出N个点的一棵树(N-1条边),节点有白有黑,初始全为白 有两种操作: 0 i : 改变某点的颜色(原来是黑的变白,原来是白的变黑) 1 v : 询问1到v的路径上的第一个黑 ...

  8. D. Misha, Grisha and Underground 树链剖分

    D. Misha, Grisha and Underground 这个题目算一个树链剖分的裸题,但是这个时间复杂度注意优化. 这个题目可以选择树剖+线段树,时间复杂度有点高,比较这个本身就有n*log ...

  9. 6.3 省选模拟赛 Decompose 动态dp 树链剖分 set

    LINK:Decompose 看起来很难 实际上也很难 考验选手的dp 树链剖分 矩阵乘法的能力. 容易列出dp方程 暴力dp 期望得分28. 对于链的情况 容易发现dp方程可以转矩阵乘法 然后利用线 ...

随机推荐

  1. 浏览器数据库 IndexedDB 入门教程

    一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...

  2. java 泛型的通配符和限定

    package cn.sasa.demo1; import java.util.ArrayList; import java.util.Collection; import java.util.Ite ...

  3. 洛谷P4426 毒瘤 [HNOI/AHOI2018] 虚树+树上dp

    正解:虚树+树上dp 解题报告: 传送门! 首先解释一下题意趴,,,语文70pts选手已经开始看不懂题辣QAQ 大概就是个给一个图,求独立集方案,且保证图是联通的,边的数量最多只比点多10 首先思考如 ...

  4. phpstudy + dvws

    下载apache+mysql+php 的服务组件 phpstudy phpstudy 下载地址 https://www.baidu.com/link?url=EN5Br6PK-Gboaf905Jjt0 ...

  5. mysql常用压测工具

    关键字:mysql压测工具 mysqlslap.sysbench  基准测试sysbench 压力测试 tpcc  具体怎么使用百度

  6. what's the python之模块

    正则表达式 首先,我们引入了正则表达式的知识.所谓正则表达式,就是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对 ...

  7. 细细探究MySQL Group Replicaiton — 配置维护故障处理全集(转)

    如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各位支持! 

  8. 001-RESTful服务最佳实践-RestFul准则、HTTP动词表示含义、合理的资源命名、响应格式XML和JSON

    一.概述 因为REST是一种架构风格而不是严格的标准,所以它可以灵活地实现.由于这种灵活性和结构自由度,对设计最佳实践也有很大的差异. API的方向是从应用程序开发人员的角度考虑设计选择. 幂等性 不 ...

  9. 快学Scala 1

      1. Scala解释器读到一个表达式,对它进行求值,将它打印出来,接着再继续读下一个表达式.这个过程被称作“读取-求值-打印-循环”,即REPL.   2. 从技术上来讲,scala程序并不是一个 ...

  10. PHP的类,abstract类,interface及关键字extends和implements

    原文:https://blog.csdn.net/qq_19557947/article/details/77880757?locationNum=4&fps=1 PHP类 PHP类是单继承, ...