树上dp
文章平均质量分 52
瘾ิۣۖิۣۖิۣۖิꦿ
入坑ACM的一名大学生,欢迎关注一起学习!
展开
-
Rinne Loves Edges【树形dp】
题目描述Rinne 最近了解了如何快速维护可支持插入边删除边的图,并且高效的回答一下奇妙的询问。她现在拿到了一个 n 个节点 m 条边的无向连通图,每条边有一个边权 wiw_iwi现在她想玩一个游戏:选取一个 “重要点” S,然后选择性删除一些边,使得原图中所有除 S 之外度为 1 的点都不能到达 S。定义删除一条边的代价为这条边的边权,现在 Rinne 想知道完成这个游戏的最小的代价,这样她就能轻松到达 rk1 了!作为回报,她会让你的排名上升一定的数量。输入描述:第一..原创 2022-04-28 23:54:41 · 87 阅读 · 0 评论 -
牛客 Tree 【树形dp】
题目描述修修去年种下了一棵树,现在它已经有n个结点了。修修非常擅长数数,他很快就数出了包含每个点的连通点集的数量。澜澜也想知道答案,但他不会数数,于是他把问题交给了你。输入描述:第一行一个整数n (1≤ n ≤ 106),接下来n-1行每行两个整数ai,bi表示一条边 (1≤ ai,bi≤ n)。输出描述:输出n行,每行一个非负整数。第i行表示包含第i个点的连通点集的数量对109+7取模的结果。示例1输入61 21 32 44 54 6输出12原创 2022-04-28 23:50:43 · 156 阅读 · 0 评论 -
二叉苹果树【树上背包】
题解:树上背包详细题解AC代码:#include<bits/stdc++.h>using namespace std;#define sc(x) scanf("%d",&x)#define sl(x) scanf("%lld",&x)#define ll long long#define pb push_backtypedef pair<int,int>PII;const int Max=1e6+5;const ll INF=1e15+5;原创 2022-04-14 12:25:58 · 545 阅读 · 0 评论 -
树上子链(树的直径-处理负权)
题目描述:给定一棵树 T ,树 T 上每个点都有一个权值。定义一颗树的子链的大小为:这个子链上所有结点的权值和。请在树 T 中找出一条最大的子链并输出。思路:定义dp[i],代表该子树中最大的一条链(由叶子到根),注意到有可能叶子的权全是复数,所以我们把res初始化为负无穷。#include<bits/stdc++.h>using namespace std;#define sc(x) scanf("%d",&x)#define sl(x) scanf("%.原创 2022-04-12 19:36:49 · 277 阅读 · 0 评论 -
树的最小支配集和最小点覆盖
题意:John想让他的所有牛用上手机以便相互交流,他需要建立几座信号塔在N块草地中。已知与信号塔相邻的草地能收到信号。给你N-1个草地(A,B)的相邻关系,问:最少需要建多少个信号塔能实现所有草地都有信号。思路:树的最小支配集。定义:dp[i][0]为这个点本身有观测站,dp[i][1]为这个点没有观测站,但是父亲有,dp[i][2]为这个点没有观测站,但是儿子有,那么结果就是min(dp[i][0],dp[i][2])。转移:dp[i][0]=∑min(dp[j][0],dp[j原创 2022-04-12 15:28:02 · 1044 阅读 · 0 评论