![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树dfs
Tearsゆ
破铜烂铁ACMer
展开
-
基环树dp入门
基环树原创 2022-06-30 14:13:21 · 278 阅读 · 0 评论 -
Tree(树形dp)
link做法显然 dp方程dp[u]*=(dp[v]+1);我们考虑换跟a n s [ v ] = ( (a n s [u ] / ( d p[ v ] + 1 )) + 1 ) * dp [ v ] ;dp[u]+1)%mod==0 单独处理一下即可#include <bits/stdc++.h>using namespace std;#define int long long//typedef long long ll;typedef pair<int,原创 2022-05-28 20:01:44 · 67 阅读 · 0 评论 -
dsu on tree 专题
void dfs(int u,int fa){ d[u]=d[fa]+1; sz[u]=1; int ma=-1; for(int v:g[u]) { if(v==fa)continue; dfs(v,u); sz[u]+=sz[v]; if(sz[v]>ma) { ma=sz[v]; son[u]=v; } }}给定一个以1为根的n个节点的树,每个点上有一个字母(a-z),每个点的深度定义为该节点到1号节点路径上的点数.每次询问 ...原创 2022-05-27 14:38:33 · 94 阅读 · 0 评论 -
树形dp 关于转化为边的贡献的一些题目
1#include <bits/stdc++.h>using namespace std;#define int long long//typedef long long ll;typedef pair<int,int> pii;#define x first #define y second#define pb push_back#define inf 1e18#define IOS std::ios::sync_with_stdio(false);c原创 2022-05-26 16:12:23 · 66 阅读 · 0 评论 -
The 2019 ICPC Asia Shanghai Regional Contest H.Tree Partition(二分+树dp)
link题意一颗(n<=1e5)的树,要求把其分为(k<=n)个子树,要求每个子树的最大值最小最大值最小 二分典中典 我们从下往上 如果发现一个树的大小 >mid 我们就切割它#include <bits/stdc++.h>using namespace std;#define int long long//typedef long long ll;typedef pair<int,int> pii;#define x first原创 2022-05-24 12:37:11 · 67 阅读 · 0 评论 -
CodeCraft-21 and Codeforces Round #711 (Div. 2) F. Christmas Game (换根dp+树上博弈(nim))
link这个题有点难!原创 2022-05-19 17:19:33 · 101 阅读 · 0 评论 -
Codeforces Round #506 (Div. 3) E. Tree with Small Distances(思维 树dp)
link题意:三级标题一棵树,你可以加一些边使根节点1到其他所有点的距离不超过2,问加的最少边数很显然的是我们每次连的边都是连接根节点的 如果u的儿子v的深度大于2 我们向u连边d[v]=2d[fa]=min(2,d[fa])d[u]=1#include <bits/stdc++.h>using namespace std;int n;const int N=200010;int d[N];vector<int >g[N];int ans;#define原创 2022-05-16 17:26:35 · 98 阅读 · 0 评论 -
多比特杯武汉工程大学第四届ACM程序设计竞赛同步赛 F能源收集者 (树形dp)
link直接暴力set按题意模拟 转化为树的直径有一点要注意如果不加if(a[v].size()>a[u].size())swap(a[u],a[v]);会mle#include <bits/stdc++.h>using namespace std;#define int long long//typedef long long ll;typedef pair<int,int> pii;#define x first #define y secon原创 2022-05-14 13:17:37 · 181 阅读 · 1 评论 -
Codeforces Round #595 (Div. 3) F. Maximum Weight Subset
link题意给你一个树 让你求一个集合的所有点的权值和这个几何满足所有的点之间的距离大于k一道很妙的树形dpdp[i][j] 表示以i为根只取深度大于等于j的最大值然后转移就行具体细节看代码#include <bits/stdc++.h>using namespace std;//#define int long longtypedef long long ll;typedef pair<int,int> pii;#define x first #d原创 2022-05-04 22:47:52 · 68 阅读 · 0 评论 -
树上差分(lca)
对边差分(u,v)上全部加上w,对于差分数组就是:u加上w,v加上w,lca减去2 × w用子树中差分数组的和来还原信息每个点的信息记录的是其到父亲的边的信息边差分我们对每条a---b +1lca(a,b)-1;统计每个点需要的非树边s如果 s=0 +m s=1 ++ s>1 +0#include <cstdio>#include <cstring>#include <iostream>#include <原创 2022-05-01 15:28:39 · 903 阅读 · 0 评论 -
Kruskal重构树
插个眼,博主写的 收益匪浅转载 2022-05-01 11:27:57 · 57 阅读 · 0 评论 -
1406C - Link Cut Centroids (树的重心)
题目链接题意 一棵树 删除一条边加上一条边使得他的重心唯一树的重心 的运用我们首先要知道树的重心最多只有两个如果树的重心只有一个 我们直接随机输出两条边另一种情况 我们 让 一个重心的最大子树的 叶子节点 与他的父亲断开 并把它连接到另一个重心上#include <bits/stdc++.h>using namespace std;#define int long long#define inf 0x3f3f3f3f3f#define pb push_backco原创 2022-04-26 20:37:31 · 121 阅读 · 0 评论