题目链接

题意:给你一棵无根树,每次你可以选择一个点从白点变成黑点(除第一个点外别的点都要和黑点相邻),变成黑点后可以获得一个权值(白点组成连通块的大小) 问怎么使权值最大

思路:首先,一但根确定了,整棵树的权值就只需要模拟即可,所以思路就转换为求哪一个点为根的权值最大。

这题需要用到一个二次扫描换根的思想,我们可以先从任意一个点去进行树形dp 并且得到从这个点开始去逐渐更新他的儿子节点

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
#define ll long long int
using namespace std;
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
int moth[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int dir[4][2]={1,0 ,0,1 ,-1,0 ,0,-1};
int dirs[8][2]={1,0 ,0,1 ,-1,0 ,0,-1, -1,-1 ,-1,1 ,1,-1 ,1,1};
const int inf=0x3f3f3f3f;
const ll mod=1e9+7;
int n;
vector<int> G[200007];
ll dp[200007]; //表示i节点以下的所有贡献
ll f[200007];  //以i为根的权值
ll nump[200007]; //儿子节点数(包含自己)
void dfs(int u,int fa){nump[u]=1;for(int i=0;i<G[u].size();i++){int v=G[u][i];if(v==fa) continue;dfs(v,u);nump[u]+=nump[v];}
}
void dfss(int u,int fa){for(int i=0;i<G[u].size();i++){int v=G[u][i];if(v==fa) continue;dfss(v,u);dp[u]+=dp[v];}dp[u]+=nump[u];
}
void change(int u,int fa){for(int i=0;i<G[u].size();i++){int v=G[u][i];if(v==fa) continue;f[v]=f[u]-nump[v]-dp[v]+n-nump[v]+dp[v]; //核心代码change(v,u);}
}
int main(){ios::sync_with_stdio(false);cin>>n;for(int i=1;i<n;i++){int u,v; cin>>u>>v;G[u].push_back(v);G[v].push_back(u);}dfs(1,0);  dfss(1,0);f[1]=dp[1];change(1,0);ll ans=0;for(int i=1;i<=n;i++){ans=max(ans,f[i]);}cout<<ans<<"\n";return 0;
}

转载于:https://www.cnblogs.com/wmj6/p/11125918.html

Educational Codeforces Round 67 E.Tree Painting (树形dp)相关推荐

  1. Educational Codeforces Round 25 G. Tree Queries

    题目链接:Educational Codeforces Round 25 G. Tree Queries 题意: 给你一棵树,一开始所有的点全是黑色,有两种操作. 1 x 将x这个点变为黑色,保证第一 ...

  2. Educational Codeforces Round 67 (Rated for Div. 2)(D思维题 线段树/E树形dp(换根dp) 二次扫描与换根法)

    心得 D写了个假算法被hack了wtcl- E据涛神说是二次扫描与换根法,看了看好像和树形dp差不多 F概率dp G费用流 回头再补 思路来源 马老师 归神 贤神等代码 http://www.mami ...

  3. Educational Codeforces Round 67小结

    已AC:C,D,E,F 很喜欢这场比赛的题目风格.而且也不难. C.Vasya And Array 题目大意: 给你mmm条两类限制:区间[L,R][L,R][L,R]单调非降 / 区间[L,R][L ...

  4. Educational Codeforces Round 8 D. Magic Numbers 数位DP

    D. Magic Numbers 题目连接: http://www.codeforces.com/contest/628/problem/D Description Consider the deci ...

  5. CodeForces 771C Bear and Tree Jumps 树形DP

    题意: 给出一棵树,一个人可以在树上跳,每次最多跳\(k(1 \leq k \leq 5)\)个点 定义\(f(s,t)\)为从顶点\(s\)跳到顶点\(t\)最少需要跳多少次 求\(\sum\lim ...

  6. C. Robot in a Hallway Educational Codeforces Round 133 (Rated for Div. 2)dp

    dp问题 There is a grid, consisting of 22 rows and mm columns. The rows are numbered from 11 to 22 from ...

  7. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  8. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  9. Educational Codeforces Round 73 (Rated for Div. 2) F. Choose a Square 线段树 + 二维转一维

    传送门 文章目录 题意: 思路: 题意: 给你nnn个点(xi,yi)(x_i,y_i)(xi​,yi​),每个点有个价值cic_ici​,现在你可以框一个正方形,要求左下角和右上角的坐标(x,y)( ...

  10. Educational Codeforces Round 54 (Rated for Div.2)

    Educational Codeforces Round 54 (Rated for Div.2) D. Edge Deletion 题意:一张n个点的无向图,保留其中k条边,使得有尽可能多的点与1的 ...

最新文章

  1. jquery textSlider 文字滚动
  2. 浅析网站开发的未来前景如何?
  3. java--遍历自定义数组
  4. Linux的secureCRT设置字体大小
  5. Django之ORM操作
  6. nssl1522-简单数数题【dp】
  7. lambda表达式优化反射_反射选择器表达式
  8. Gartner:PaaS 和平台架构领域的 4 大趋势 | 技术头条
  9. 闪退mac_幕布闪退怎么办?别着急看这里
  10. 一个开源的ORM框架——Light.Data
  11. VUE 注册验证码页面实例
  12. 14_按类别分页展示商品
  13. VVC/JEM代码学习17:xCheckRDCostMerge2Nx2NFRUC
  14. YUI 3 Cookbook 中文版
  15. SAR图像变化检测的评价指标
  16. 题解 [CF1682D] Circular Spanning Tree
  17. MySQL安装出现的问题
  18. 销售人员的月工资数量(月工资=基本工资+提成,提成=商品数*1.5)
  19. 阿里云ECS最新的实例规格族有哪些
  20. 泛微齐业成,一文告诉你如何实现全程数字化的预算管理

热门文章

  1. 简单解析三种JAVA调用方式-同步,异步,回调
  2. 【暴力搜索】[HDU 1016]Prime Ring Problem
  3. C++中的explicit关键字 - 抑制隐式转换(转)
  4. 不使用服务器控件的ASP.NET
  5. 手贱拆笔记本清灰记录
  6. Android客户端和服务器端数据交互的第三种方法
  7. VS2013打开项目出现未找到与约束contractname 匹配的导出的错误
  8. python3闭包通俗解释_python通俗解说闭包
  9. flask pyecharts_利用 Flask 动态展示 Pyecharts 图表数据的几种方法
  10. 自己配置外接屏幕和驱动,最终通过hdmi连接