Mys_C_K的博客

吾自撷高山之月色,独随足落处往行。

AGC 008 F Black Radius - 树dp

全机房的人讨论了很长时间最后感谢STL直接看了日文题解翻译了过来。 做法是这样的:一开始都以为是什么枚举x然后枚举d,光荣gg。 因此我们考虑枚举你染黑的连通块的中心(也就是所有直径的中点)。 有两种情况: 1)中心是一个点; 2)中心是一条边的中点; 对于1),考虑将其置为根rt,则...

2018-08-15 17:13:09

阅读数:15

评论数:0

ARC 083 E Bichrome Tree - dp

考虑一个朴素dp,设dp[x][i][j][k]表示考虑x这个节点的前i个儿子和x同色的权和是j另一种权和是k是否可行,转移显然,最后只要j<=Xx即可。显然j固定的时候k越小越好,因此对k做背包即可。 #include<iostream&...

2018-08-09 15:53:22

阅读数:10

评论数:0

bzoj 4987 Tree - dp

傻逼dp题。 #include<iostream> #include<cstring> #include<cstdio> #include&lt...

2018-08-06 12:30:44

阅读数:15

评论数:0

codeforces 804 D. Expected diameter of a tree - 分块(并不显式分块) - dp

题目大意:给你一张森林,每次询问两颗树TA,TB(A≠B)TA,TB(A≠B)T_A,T_B(A\neq B),求: ∑x∈TA∑y∈TBD(T=(V(TA)⋃V(TB),E(TA)⋃E(TB)⋃{(x,y)}))∑x∈TA∑y∈TBD(T=(V(TA)⋃V(TB),E(TA)⋃E(TB)⋃{(...

2018-06-25 12:31:00

阅读数:23

评论数:0

bzoj 3162 独钓寒江雪 - 无标号树同构 - dp - 学习笔记

对于无标号树计数首先要找到其重心作根,如果有多个就再建一个点连着两个点;这样能够保证一个节点的某棵子树不会和整棵树减去当前这颗子树形成的树同构,这样就转化为有根树。哈希就随便哈希即可。这个题,如果一个节点有x颗同构的树并且每一颗子树都有y中方案,那么就相当于y个变量每个变量取值&g...

2018-05-01 12:33:35

阅读数:23

评论数:0

一道神奇的树形dp题

题目大意:给定n,m,对于1~n中的每一个k,求有k个叶子结点且满足以下性质的二叉树的个数: 1)一个点要么是叶子结点,要么有左右儿子。 2)从根出发的任意一条路径上,向左的边不超过m次。 对998244353取模。n,m<=5000。 题解如下: 首先容易想到dp...

2017-09-26 07:28:30

阅读数:156

评论数:0

POJ 3417 Network

传送门 题目大意:给定一棵树和若干条边,问删去树上的一条边和给定的边中的一条使得图不联通的方案数。 题解: 首先注意到,把树上的一条边断掉变成的两个联通块,如果这两个联通块之间恰好有1条给定的边那么方案数+1. 如果没有那么再任意删去一条即可,方案数+(给定的边数) 那么一个显然的做法就...

2017-07-11 21:02:27

阅读数:170

评论数:0

BZOJ1827 奶牛大集会 - 树形dp

传送门 题解:分两遍dfs来做,首先求出f[x]表示以x为根且为重心,子树到其加权距离和。 转移即f[x]=\sigma {f[y]+sz[y]*dist(x,y)},其中y是x的子节点,sz为子树大小。 然后利用f数组计算答案,发现答案比f数组多了从父亲来的部分,用v表示 则v[x]=v...

2017-06-24 21:21:34

阅读数:188

评论数:0

POJ 1849 Two - dp

传送门 题目大意:自行参考 题解: exm??? 如果必须回到根结点那么答案就是边权之和的两倍。 注意到两个人肯定是走到叶子结点,这样就少走了两人之间的链长的距离。 所以要最大化链长,所以就是求直径。 答案就是边权之和的两倍减去直径长度即可。 代码: #include #incl...

2017-06-15 10:55:11

阅读数:177

评论数:0

codevs1378 选课-树形dp

传送门 题目大意:自行参考 题解:简直就是《金明的预算方案》的加强版QwQ 这个题神就神在,我们可以把一颗子树看作一个物品,只不过这个物品的体积和价值不固定。 由于这个题福利子树的体积=子树的大小。 所以可以认为子树的价值是一个关于子树大小的函数。 这样就强行把它想象成一个背包来做。 ...

2017-05-26 22:06:51

阅读数:206

评论数:0

vijos1476 旅游规划-动态规划

传送门 题解: 我是这么做的,首先第一遍求出每个点向下的不相交的最长链和次长链, 这样两条链拼起来就是就是过这个点(不包含他的父亲的情况下)的最长链。 在这些最长链中取max就可以得到直径。 然后一个点在直径上,要么他本身就在已经求出的最长链上(就是从这个点出发的最长+次长链=直径长度)...

2017-05-26 21:56:40

阅读数:219

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭