Codeforces 1187E - Tree Painting(树上所有节点的儿子数量和最大)
乍一看题意比较麻烦,好像要删点求联通性,但其实是相当于求以某一个节点为根时,他的所有后代(儿子,儿子的儿子等等)的儿子的总和最大。
两边dfs即可,第一遍dfs随便找一个点为根,求出每个节点的儿子数siz[],第二遍dfs以每个点作为根更新ans。
这里注意:如果u为根,u是v的父亲,且此时u后代的和为siz[u] = val,那么v为根时后代和为val-siz[v]+n-siz[v],以此关系作为第二遍dfs的依据、
#include <bits/stdc++.h>
using namespace std; const int maxn = 2e5 + ;
const int inf = 0x3f3f3f3f;
typedef long long ll;
int n, tot, head[maxn], siz[maxn];
struct edge{
int to, next;
} ed[maxn<<];
ll ans;
inline void init(){
memset( head, -, sizeof(head) );
tot = ; ans = ;
for( int i=; i<=n; i++ ) siz[i] = ;
} inline void add( int u, int v ){
ed[++tot].to = v; ed[tot].next = head[u]; head[u] = tot;
ed[++tot].to = u; ed[tot].next = head[v]; head[v] = tot;
} inline void FindSiz( int x, int fa ){
for( int i=head[x]; i!=-; i=ed[i].next ){
int y =ed[i].to;
if( y!=fa){
FindSiz(y, x);
siz[x] += siz[y];
}
}
ans += siz[x];
} inline void dfs( int x, int fa, ll val ){
for( int i=head[x]; i!=-; i=ed[i].next ){
int y = ed[i].to;
if( y==fa ) continue;
ll tmp = val-siz[y]+n-siz[y];
ans = max( ans ,tmp );
dfs( y, x, tmp );
}
} int main(){
scanf("%d", &n);
init();
for( int i=; i<n; i++ ){
int u, v;
scanf("%d%d", &u, &v);
add( u, v );
}
FindSiz(, );
dfs( , , ans );
printf("%lld\n", ans); return ;
}
Codeforces 1187E - Tree Painting(树上所有节点的儿子数量和最大)的更多相关文章
- codeforces#1187E. Tree Painting(树换根)
题目链接: http://codeforces.com/contest/1187/problem/E 题意: 给出一颗树,找到一个根节点,使所有节点的子节点数之和最大 数据范围: $2 \le n \ ...
- CodeForce - 1187 E. Tree Painting (换根dp)
You are given a tree (an undirected connected acyclic graph) consisting of nn vertices. You are play ...
- CodeForces 375D Tree and Queries
传送门:https://codeforces.com/problemset/problem/375/D 题意: 给你一颗有根树,树上每个节点都有其对应的颜色,有m次询问,每次问你以点v为父节点的子树内 ...
- Codeforces 1606F - Tree Queries(虚树+树形 dp)
Codeforces 题面传送门 & 洛谷题面传送门 显然我们选择删除的点连同 \(u\) 会形成一个连通块,否则我们如果选择不删除不与 \(u\) 在同一连通块中的点,答案一定更优. 注意到 ...
- 2015暑假多校联合---Mahjong tree(树上DP 、深搜)
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5379 Problem Description Little sun is an artis ...
- Jquery EasyUI Combotree和 EasyUI tree展开所有父节点和获取完整路径
Jquery EasyUI Combotree展开所有父节点 Jquery EasyUI Combotree获取树完整路径 Jquery EasyUI tree展开所有父节点 Jquery EasyU ...
- easyui tree扩展tree方法获取目标节点的一级子节点
Easyui tree扩展tree方法获取目标节点的一级子节点 /* 只返回目标节点的第一级子节点,具体的用法和getChildren方法是一样的 */ $.extend($.fn.tree.meth ...
- hdu 2196(求树上每个节点到树上其他节点的最远距离)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2196 思路:首先任意一次dfs求出树上最长直径的一个端点End,然后以该端点为起点再次dfs求出另一个 ...
- EasyUI的tree展开所有的节点或者根据特殊的条件控制展示指定的节点
展示tree下的所有节点$(function(){ $('#t_funinfo_tree').tree({ checkbox: true, url:"<%=basePath %> ...
随机推荐
- 每日一问:详细说一下 MeasureSpec.UNSPECIFIED
详细说一下 MeasureSpec.UNSPECIFIED 前面的文章 我留下了一个疑惑,那就是到底为什么 NestedScrollView 要把子 View 的测量模式强行设置为 MeasureSp ...
- [Gamma] 发布说明
[Gamma] 发布说明 发布网址为http://60.205.230.0 新功能前瞻 团队合作:支持多人合作完成项目 项目进度管理:便于监控项目进度 站内信系统:团队合作与审核需要 已知BUG修复 ...
- Zuul之路由熔断
Zuul作为Netflix组件,可以与Ribbon.Eureka.Hystrix等组件结合,实现负载均衡.熔断器的功能 Spring boot2X集成zuul与consul实现负载均衡和反向代理 当后 ...
- Linux简介和各发行版介绍
一.Linux 简介 Linux 内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在大学上学时出于个人爱好而编写的. Linux 是一套免费使用和自由传播的类 Unix 操作系统,是 ...
- 20190802_Nginx基础
20190802_Nginx基础 文章主要内容: 关于中间件比较通俗易懂的解释 Nginx简述 Nginx环境配置以及安装 Nginx的目录和配置语法 Nginx日志_log_format Nginx ...
- Python【每日一问】25
问: [基础题]:利用条件运算符的嵌套来完成此题:学习成绩 >=90 分的同学用 A 表示,60-89 分之间的用 B 表示,60 分以下的用 C 表示. [提高题]:求 s=a + aa + ...
- python三级联动
#以字典的形式 保存相关省市数据 menu={ '北京':{ '朝阳':{ '国贸':{ 'CICC':{}, 'HP':{}, '银行':{}, 'CCTV':{} }, '望京':{ '陌陌':{ ...
- 使用git svn clone迁移svn仓库(保留提交记录)
使用git svn clone迁移svn仓库 clone命令可以指定很多参数,主要用到这些,你也可以使用git svn help查看完整的参数列表. git svn clone https://172 ...
- AQS原理解析 AbstractQueuedSynchronizer
AQS实现原理 https://blog.csdn.net/ym123456677/article/details/80381354 https://www.cnblogs.com/keleli ...
- Java可视化计算器
利用java中的AWT和SWING包来做可视化界面. 首先来简单了解一下这两个包: AWT和Swing都是Java中用来做可视化界面的.AWT(Abstract Window Toolkit):抽象窗 ...