本代码现在在Poj上无法AC,请谨慎参考

因为这个换根比较简单,只简述一下要维护的东西:
1,每个节点维护一个weight[],表示从叶子到根的方向,这个点最多能接纳的流量。
2,边权。
所以画画图,手动模拟一下就得出了以下转移:

void dfs2(int u,int fa)
{for (int i = head[u]; i ; i = a[i].next) {int v = a[i].to;if (v == fa) continue;int now = res[u] - a[i].w;int c = 0;c += min(a[i].w,now);for (int j = head[v]; j ; j = a[j].next) {int vv = a[j].to;if (vv == u) continue;c += min(a[j].w,weight[vv]);}
//        cout << v << ' ' << c << endl;res[v] = c;dfs2(v,u);}
}

简单来说每个点的答案就是把当前节点v周围的流量重新再加起来。这个可以由weight[],边权,res[u]得出。
注意这里是顺推,因为下一个答案应有上一个答案得出。

//
// Created by SANZONG on 2021/7/8.
//
#include "bits/stdc++.h"
using namespace std;
const int maxn = 2e5;
struct node{int next,to,w;
}a[maxn<<1];
int cnt;
int head[maxn << 1];
void add(int u,int v,int w)
{a[++cnt].to = v;a[cnt].w = w;a[cnt].next = head[u];head[u] = cnt;
}int weight[maxn];
void dfs(int u,int fa)
{if (a[head[u]].to == fa && !a[head[u]].next){weight[u] = 0x3f3f3f3f;return;}int w = 0;for (int i = head[u]; i ; i = a[i].next) {int v = a[i].to;if (v == fa) continue;dfs(v,u);w += min(weight[v],a[i].w);}weight[u] = w;}
int res[maxn];
void init()
{cnt = 0;memset(head,0,sizeof(head));memset(a,0,sizeof(a));memset(res,0,sizeof(res));
}void dfs2(int u,int fa)
{for (int i = head[u]; i ; i = a[i].next) {int v = a[i].to;if (v == fa) continue;int now = res[u] - a[i].w;int c = 0;c += min(a[i].w,now);for (int j = head[v]; j ; j = a[j].next) {int vv = a[j].to;if (vv == u) continue;c += min(a[j].w,weight[vv]);}
//        cout << v << ' ' << c << endl;res[v] = c;dfs2(v,u);}
}
signed main()
{//    freopen("in.txt","r",stdin);int T;cin >> T;while (T--){init();int n;cin >> n;for (int i = 1; i <= n - 1; ++i) {int u,v,w;cin >> u >> v >> w;add(u,v,w);add(v,u,w);}int ans = 0;dfs(1,0);res[1] = weight[1];dfs2(1,0);for (int i = 1; i <= n; ++i) {//            cout << i << ' ' << res[i] << endl;ans = max(ans,res[i]);}cout << ans << endl;}}

Accumulation Degree -换根dp相关推荐

  1. Accumulation Degree --- 换根dp

    个人感觉,换根dp的实质就是在不确定答案是以哪个节点为根时,先假设1个节点为根去遍历,更新答案,接着利用数学公式推出该假设根的子儿子为根的时候对应的值. #include<iostream> ...

  2. 树形dp ---- 树形换根dp F - The Maximum Subtree

    题目链接 题目大意: 给定一颗树,求这个树的最大子树,且这个子树是一个good-tree. good-tree的定义是:每个节点可以表示成一个数值区间,而树上的边表示两个点表示的数值区间相交 解题思路 ...

  3. 2020牛客多校第一场B虚树+质数筛+换根dp

    题目大意: 1.可以发现阶乘增长是很快的所以你要把整颗树建立出来是不实际的. 2.我们可以假设这棵树已经建出来出来了我们应该怎么搞 首先很明显是一个树形dp, 我们设dp[j],是以j为u到其他点距离 ...

  4. BZOJ 2159 「国家集训队」Crash 的文明世界(第二类斯特林数,换根DP)【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2159 是 hydro 的 BZOJ ...

  5. 洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)

    题目链接:点击查看 题目大意:给出一棵 n 个节点的树 A ,再给出一棵 n + 1 个节点的树 B,题目保证了树 B 是树 A 添加了一个叶子结点后的一棵树,只不过编号的顺序不同,现在问这个叶子节点 ...

  6. 牛客多校1 - Infinite Tree(虚树+换根dp+树状数组)

    题目链接:点击查看 题目大意:给出一个无穷个节点的树,对于每个大于 1 的点 i 来说,可以向点 i / minvid[ i ] 连边,这里的 mindiv[ x ] 表示的是 x 的最小质因数,现在 ...

  7. 换根dp求树所有节点的最小深度

    链接:https://ac.nowcoder.com/acm/contest/18072/A 牛妹有一张连通图,由n个点和n-1条边构成,也就是说这是一棵树,牛妹可以任意选择一个点为根,根的深度为0, ...

  8. [BZOJ4379][POI2015]Modernizacja autostrady[树的直径+换根dp]

    题意 给定一棵 \(n\) 个节点的树,可以断掉一条边再连接任意两个点,询问新构成的树的直径的最小和最大值. \(n\leq 5\times 10^5\) . 分析 记断掉一条边之后两棵树的直径为 \ ...

  9. 树形(dp+换根dp)

    普通树形dp 树形dp通常围绕根节点来写状态转移方程 用一道基础的树形dp例题来具体分析: 没有上司的舞会 Ural 大学有 N 名职员,编号为 1∼N. 他们的关系就像一棵以校长为根的树,父节点就是 ...

最新文章

  1. JavaScript闭包函数箭头函数调用与执行
  2. 4g内存 mysql_4G内存 mysql数据库
  3. 怎样Selenium IDE选择combo box中值
  4. alibaba fastjson
  5. k8s创建Deployment报错:missing required field “selector“ in io.k8s.api.apps.v1.DeploymentSpec
  6. 随想录(软件逆向与OllyDbg)
  7. 利用navicat for mysql实现mysql数据库表结构复制
  8. SVN Error: Unreadable path encountered; access denied;
  9. ubuntu MySQL的卸载
  10. 麦当劳中国首个IT战略研发中心在南京启用;大食代积极布局中国西南市场 | 美通企业日报...
  11. 企业风险管理的基本流程
  12. 大数据产品开发流程规范_大数据系统开发步骤流程是怎样的
  13. 郑州灵活用工平台开发怎么选择模式?
  14. 人活着到底是为了什么?心理学家马斯洛告诉你人生的终极目标
  15. CD7388CZ功放IC,4x41W汽车音响功率放大电路,车机标配IC
  16. android蓝牙传文件开发,Android Bluetooth文件传输
  17. 攻读博士攻略 攻博贴士
  18. linux硬盘的分区、格式化、挂载以及LVM
  19. 程序员必须要掌握哪些语言
  20. WBO第一届区块链高峰论坛新闻发布会盛大召开

热门文章

  1. TSDB时序数据库时序数据压缩解压技术浅析
  2. 用c语言,制作一个心形彩色告白图案(附源码)
  3. Daily record-August
  4. Spring Boot 3.0.0正式发布,Banner不再支持图片增强可观测性
  5. 面向对象三大特征---继承
  6. cad详图怎么画_施工图大样图都是怎么学的怎么画的cad 室内设计
  7. 西门子PLC模拟量输入数据类型变换
  8. 89C52RC控制 WS2812B
  9. Android基础知识——Android SDK Manager详解
  10. 没学懂汇编写了个CE·····