假设以u为根时结果是tot,现在转换到了以u的儿子v为根,那么结果变成了tot-size[v]+(sizetot-size[v])

根据这个转移方程,先求出以1为根的tot,然后dfs一次转移即可

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm> using namespace std;
#define ll long long
#define N 200005
int a[N],n;
vector<int>e[N];
ll sum[N],ans=,sig=;
inline void dfs1(int p,int fa,int dep){
sum[p]=a[p],sig+=(ll)a[p]*dep;
for(int i=;i<e[p].size();++i)
if(e[p][i]!=fa)
dfs1(e[p][i],p,dep+),sum[p]+=sum[e[p][i]];
}
inline void dfs2(int p,int fa,ll Sum){
ans=max(ans,Sum);
for(int i=;i<e[p].size();++i)
if(e[p][i]!=fa)
dfs2(e[p][i],p,Sum-2ll*sum[e[p][i]]+sum[]);
}
int main(){
cin>>n;
for(int i=;i<=n;++i)
a[i]=;
for(int i=,u,v;i<n;++i)
cin>>u>>v,e[u].push_back(v),e[v].push_back(u);
dfs1(,,);
dfs2(,,sig);
cout<<ans+n; }

树形dp经典换根法——cf1187E的更多相关文章

  1. 模拟赛:树和森林(lct.cpp) (树形DP,换根DP好题)

    题面 题解 先解决第一个子问题吧,它才是难点 Subtask_1 我们可以先用一个简单的树形DP处理出每棵树内部的dis和,记为dp0[i], 然后再用一个换根的树形DP处理出每棵树内点 i 到树内每 ...

  2. 【NOIP2016练习】T2 旅行(树形DP,换根)

    题意:小C上周末和他可爱的同学小A一起去X湖玩. X湖景区一共有n个景点,这些景点由n-1条观光道连接着,从每个景点开始都可以通过观光道直接或间接地走到其他所有的景点.小C带着小A从1号景点开始游玩. ...

  3. 【HDOJ6662】Acesrc and Travel(树形DP,换根)

    题意:有一棵n个点的树,每个点上有两个值a[i],b[i] A和B在树上行动,A到达i能得到a[i]的偷税值,B能得到b[i],每次行动只能选择相邻的点作为目标 两个人都想最大化自己的偷税值和对方的差 ...

  4. 题解 poj3585 Accumulation Degree (树形dp)(二次扫描和换根法)

    写一篇题解,以纪念调了一个小时的经历(就是因为边的数组没有乘2 phhhh QAQ) 题目 题目大意:找一个点使得从这个点出发作为源点,流出的流量最大,输出这个最大的流量. 以这道题来介绍二次扫描和换 ...

  5. cf219d 基础换根法

    /*树形dp换根法*/ #include<bits/stdc++.h> using namespace std; #define maxn 200005 ]; int root,n,s,t ...

  6. poj 3585 Accumulation Degree(二次扫描和换根法)

    Accumulation Degree 大致题意:有一棵流量树,它的每一条边都有一个正流量,树上所有度数为一的节点都是出口,相应的树上每一个节点都有一个权值,它表示从这个节点向其他出口可以输送的最大总 ...

  7. poj3585树最大流——换根法

    题目:http://poj.org/problem?id=3585 二次扫描与换根法,一次dfs求出以某个节点为根的相关值,再dfs遍历一遍树,根据之前的值换根取最大值为答案. 代码如下: #incl ...

  8. $Poj3585\ Accumulation Degree$ 树形$DP/$二次扫描与换根法

    Poj Description 有一个树形的水系,由n-1条河道与n个交叉点组成.每条河道有一个容量,联结x与y的河道容量记为c(x,y),河道的单位时间水量不能超过它的容量.有一个结点是整个水系的发 ...

  9. 51nod 1353 树 | 树形DP经典题!

    51nod 1353 树 | 树形DP好题! 题面 切断一棵树的任意条边,这棵树会变成一棵森林. 现要求森林中每棵树的节点个数不小于k,求有多少种切法. 数据范围:\(n \le 2000\). 题解 ...

随机推荐

  1. Excel的线程 与 SynchronizationContext的实现

    COM组件的线程模型与Excel多线程的背景知识 COM组件的线程模型被称之为Apartment模型,COM对象初始化时其执行上下文(Execution Context),他要么和单个线程关联STA( ...

  2. react-router v4 理解

    1.Router (1)最基础的路由器,必须有history属性 (2)BrowserRouter和HashRouter都是由Router组件扩展而来 2.BrowserRouter (1)Brows ...

  3. shell脚本实现批量端口扫描

    #!/bin/bash # Telnet Batach readonly TMOUT= ip_prefix="192.168" ip_network_range="80- ...

  4. 笔记50 Mybatis快速入门(一)

    一.Mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...

  5. 图(graph)

    一.非线性结构:图 图由顶点集V,集合规模为n,在n个顶点之间可能存在对应关系,我们用连边来描述这种,即边E,规模为e. 邻接关系:顶点与顶点之间的关系:关联关系:顶点与它相连的边的关系.序列结构(v ...

  6. react 路由使用react-router-dom

    react 和vue一样都是使用封装history 来进行页面跳转,下面就来说一下react常用的路由插件react-router-dom这个东西在GitHub上 目前是最受欢迎的 首相还是先下载 n ...

  7. Mac电脑最常见的办公软件是什么?Notion for Mac多功能办公笔记软件使用方法

    Notion for Mac是一款最新的高效率.办公类软件,相信许多用户在办公的时候需要打开特别多的在线工具,譬如Google Drive.Dropbox Paper.Confluence.GitHu ...

  8. HTML——表格标签

    存在即是合理的. 表格的现在还是较为常用的一种标签,但不是用来布局,常见处理.显示表格式数据. 创建表格 在HTML网页中,要想创建表格,就需要使用表格相关的标签.创建表格的基本语法格式如下: < ...

  9. Java分页查询工具类

    public class PageList<T> { private int totalpage; //总页数 private int totalcount; //总记录数 private ...

  10. 解析Tomcat之HttpServlet详解

    解析Tomcat之HttpServlet详解 Servlet的框架是 由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所 ...