
树形dp
H_ang
记录一些东西吧!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
每日一题 4月8日 黑白树 树形DP
题目链接:https://ac.nowcoder.com/acm/problem/13249#include<bits/stdc++.h>#define LL long longusing namespace std; int k[100005], f[100005];int ans=0;vector<vector<int> > v(10000...原创 2020-04-07 15:08:39 · 366 阅读 · 0 评论 -
每日一题 4月7日 树 dfs序+DP
题目链接:https://ac.nowcoder.com/acm/problem/13611#include <bits/stdc++.h>#define LL long longusing namespace std;const int mod=1e9+7; LL f[305][305];int main(){ int n, m; scanf("%d%d...原创 2020-04-07 15:07:06 · 318 阅读 · 0 评论 -
牛客OI周赛15-提高组 A 环球旅行-树的直径
题目链接:https://ac.nowcoder.com/acm/contest/4912/A#include <bits/stdc++.h>#define LL long longusing namespace std; struct E{ int to, w; E(int a, int b){ to=a; w=b; }};...原创 2020-04-07 15:05:30 · 273 阅读 · 0 评论 -
学军信友队趣味网络邀请赛 A-B-D 思维+树形DP/直径+数论
题目链接:http://115.236.49.52:83/contest/1351题解:假设n是奇数。n如果是偶数,翻转90度就可以了。B:#include <bits/stdc++.h>using namespace std;#define LL long long vector<vector<int> > v(50005);int...原创 2020-04-07 15:02:48 · 412 阅读 · 0 评论 -
每日一题 4月1日 Rinne Loves Edges 树形DP
题目链接:https://ac.nowcoder.com/acm/problem/22598?&headNav=acm#include<bits/stdc++.h>#define LL long longusing namespace std; struct node{ LL to, w;};vector<vector<node> ...原创 2020-04-01 16:06:23 · 178 阅读 · 0 评论 -
poj1947 Rebuilding Roads - 树上背包-删除最少边得到一个大小为p的连通块
题目链接:http://poj.org/problem?id=1947题目大意:一棵节点数为n的树。让你删除最少的边。得到一个大小为p的子树。 p<=n<150。我们考虑用f[u][s]为选择u节点及其子树大小为s的删除最小边树我们考虑用f[u][s]为选择u节点及其子树大小为s的删除最小边树 我们考虑用f[u][s]为选择u节点及其子树大小为s的删除最小边树dfs过程中增加一棵...原创 2020-02-28 14:25:50 · 273 阅读 · 0 评论 -
省赛E-树形dp计数-换根+二次扫描
昨晚上学了二次扫描后,才发现省赛的树形dp题竟然可以用这个写。我们用f[u] 表示:以节点u为根的递增路径条数。并且计算这些路径相互之间的贡献。void dfs1(int u, int fa){ for(int i=0; i<v[u].size(); i++){ int to=v[u][i]; if(to==fa){ c...原创 2019-12-05 19:39:43 · 188 阅读 · 0 评论 -
最大疯子树-树形dp+换根+二次扫描
题目:疯子树肯定还是一棵树所以,所谓的最短路径就是吓唬你的,树上两点之间有且只有一条路径。b1和b2必须是相邻的,否则不可能是一棵疯子树。再想一想,用同样的方式构造剩下的点的话,那么可以得到一个结论:如果以一棵疯子树以键值最小的那个节点为根,那么对于从根到叶的每一条简单路径上,键值是不严格递增的!思路:我们就可以用树形dp求以每个节点为根,的最多不严格递增简单路径的节点个数,voi...原创 2019-12-05 11:35:23 · 380 阅读 · 0 评论 -
CCF 201909-5 城市规划-树形dp
题目链接;http://www.freesion.com/article/8602142306/题目大意:思路:u是v的直连父亲,先往下搜,向上回溯时,枚举边计算贡献,即u和v之间边w,v里面选了p个,则all-v这一块选k-p个边w被经过p*(k-p)次,实际转移时,考虑v里取了p个,u在已经搜过的子树里取了q个,以此来更新dp[u][p+q]的值dp[u][p]表示在u这棵...原创 2019-12-04 15:41:03 · 1542 阅读 · 0 评论 -
codeforces 1244 D - Paint the Tree 树链上dp
题目链接:http://codeforces.com/contest/1244/problem/D题目大意:给你一棵树,让你染色,一共有3种颜色.i节点涂成颜色1代价为a[i], 2:b[i], 3:c[i]。并且树一条路径上连续的三个节点不能有颜色重复。输出最小代价,或者不能做到-1。思路:如果不是一条链就无法做到。很好证明。如果是一条链。f[i][a][b]:i节点染色颜色a,它的...原创 2019-11-20 15:47:55 · 162 阅读 · 0 评论 -
UVA - 10859 树形dp-与父节点有关&&有两个最优化条件。
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1800题目大意:#include <bits/stdc++.h>#define LL long longusing namespace std;...原创 2019-09-25 19:16:51 · 121 阅读 · 0 评论 -
LA 3902网络 无根树转有根树 树形dp - 放置最少的服务器距离k覆盖所有叶节点
题目大意:#include <bits/stdc++.h>#define LL long longusing namespace std;int n, s, k;vector<int> g[1005], node[1005];int fa[1005];bool vis[1005];//无根树转有根树,计算fa数组, 根据深度把叶子节点插入nodes表中...原创 2019-09-18 20:52:48 · 230 阅读 · 0 评论 -
树上直径-树上最远点O(n)
题目大意:对于一棵n个结点的无根树,求出每个结点的最远点,要求时间复杂度为O(n)。对于一个点,距离它最远的点一定是直径的端点。证明:我们求直径的时候,两次dfs。两次bfs(或者dfs)方法:先从任意一点P出发,找离它最远的点Q,再从点Q出发,找离它最远的点W,W到Q的距离就是是的直径①若P已经在直径上,根据树的直径的定义可知Q也在直径上且为直径的一个端点②若P不在直径上,我们用...原创 2019-06-25 17:17:28 · 1337 阅读 · 1 评论 -
树形dp-UVA-1218-完美的服务-与父节点有关的dp
题目链接:https://vjudge.net/contest/307650#problem/B题目大意:思路:因为d(u, 1)和d(u, 2)对子节点来说只要一个区别d(u, 1):所有子节点都不是服务器d(u, 2):只有一个子节点是服务器那么d(u, 1):自己不是服务器,所有子节点都不是服务器,那么他的子节点状态是d(v, 2)d(u, 1)-d(v, 2)表示u节点...原创 2019-06-25 13:09:08 · 238 阅读 · 0 评论 -
树形dp-poj3342 - 树的最大独立集 及其 是否唯一
题目链接:http://poj.org/problem?id=3342题目大意:思路:字符串用map编个号。然后存树,可以无向图,也可以有向图,因为这里输入a b,b是a的老板。那么就是b->a。此处用d[u][0]表示不选择节点u时,以u为根的子树的最大可选人数,那么d[u][1]则表示选择节点u的时候,以u为根的子树的最大可选人数。同样的f[u][0]表示不选择节点u时,...原创 2019-06-24 22:27:52 · 183 阅读 · 0 评论 -
树形dp-UVA-12186-工人请愿书
题目链接:https://vjudge.net/contest/307650#problem/A题目大意:思路:设d(u)表示让u给上级发信最少需要多少个工人。假设u有k个子结点,则至少需要c=kT/100+(kT%100==0?0:1)个直接下属发信才行。把所有子结点的d值从小到大排序,前c个加起来即可。最终 答案是d(0)。因为要排序,算法的时间复杂度为O(nlogn)。动态规划部分...原创 2019-10-18 12:39:38 · 323 阅读 · 0 评论 -
树形dp 树上dp组合计数
#include<bits/stdc++.h>#define LL long longusing namespace std;struct node{int v;int w;int next;}e[200005];int head[100005], cut=-1;LL dp[100005][3], ans=0;void into(){cut=-1, ans=0;...原创 2019-05-13 20:17:34 · 479 阅读 · 0 评论