随笔分类 - 树形dp
摘要:打铜了 爬了 补题: $I$ 一道终极歪榜题 路线事实上一共有$2H$种,可以映射到$[-H,H)$上,$\ge 0 $的部分表示$x=0$时向上 用$map$简单维护一下即可 1 #include<bits/stdc++.h> 2 #define inf 2139062143 3 #define
阅读全文
摘要:A 很猛的生成函数 咕 B 不妨考虑将题意转化为图,设$0$为起始点,$n+1$为终止点 假设当前在$i$点,下一次生成的数需要更大才能继续,即每次可以走到$i+1,\dots n$这些点 而对于生成更小数的情况则代表了结束,对这种情况我们对$i$向$n+1$连这些概率的边代表结束 设$f_i$表示
阅读全文
摘要:题目大意: 对每个点$x$ 求$\sum\limits_{i=1}^{n} {dis(i,j)}^k$ 思路: 首先可以把式子展开得到$dis(i,j)^k=\sum\limits_{t=1}^k \binom{dis(i,j)}{t} S2(k,t)* t!$ ,$S2$为第二类斯特林数 因此对每
阅读全文
摘要:T1 题目大意: 一棵树有正边权,$Q$次询问,询问$x$与编号在$[l,r]$之间的点的最小距离 思路: 建立点分树,由于在每个分治重心内任意两个点的lca可以看做重心 我们可以预处理出一个点到他点分树上所有的祖先的距离,每个点最多处理$log$个距离 对每个重心维护动态开点线段树,把每个点暴力加
阅读全文
摘要:T1 sort 题目大意: $n$个人,每个人有一个分,$m$对关系,表示两个人的分数关系,已知关系中每个人最多有一个人的分比他小 求满足条件的所有人的排名有多少种 思路: 容易发现若没有$=$号则使用组合数就可以非常简单的合并子树 若有两个等级数为$i,j$ 我们可以枚举最终的等级数$k$,设这样
阅读全文
摘要:题目大意: 求树上取三个点这三个点两两距离相等的方案数 思路: 远古时候的$n^2$做法是换根 但那样无法继续优化了 学习了一波长链剖分 考虑如何在一棵树上进行dp 设$f[i][j]$表示以$i$为根的子树内与$i$的距离为$j$的点数量 $g[i][j]$表示以$i$为根的子树内满足与lca距离
阅读全文
摘要:bzoj 2152 聪聪可可 题目大意: 求树上边权和为3的倍数的路径的条数 思路: 点分治练习题 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cmath> 5 #include<algorithm>
阅读全文
摘要:bzoj 2882 工艺 题目大意: 求一个数列的最小表示法 思路: 在后缀自动机上直接沿最小的边跑n步即可(学习了一波map的高端操作 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cmath> 5 #
阅读全文
摘要:题目大意: 一棵树 Q次询问 每次询问给K个点 求把些点都与根断开的最小代价 思路: 学习了一波虚树 记录一下每个点到根的路径上边权的最小值 dp+虚树 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstd
阅读全文
摘要:水平太菜暴力写挂被汪神踩的一次考试 耻辱#2 T1 game 题目大意: 有一个n×n的01方格,要从中选出一个面积最大的矩形区域,要求这个矩形区域不能有超过k个1 输出这个面积 思路: 枚举起点后 再枚举一维长度 可以发现另一维长度是单调的 n三方暴力即可 1 #include<iostream>
阅读全文
摘要:由于算错了inf 又ak失败了 过于菜 T1 年轮蛋糕 loj 2758 题目大意: n个数构成的环 把这个环分成三段 使最小的最大 求这个最小段的和的最大值 思路: 可以想到二分 因为log方可以过 所以可以二分长度后lower_bound找断点 或者使用滑动窗口 1 #include<iostr
阅读全文
摘要:T1 HOTEL 题目大意: 在树上选出三个点使这三个两两之间距离相等 求选出这三个点的方案 思路: 树形dp 枚举每一个树根 选三个和选两个差不多 多开一个dp数组 1 #include<iostream> 2 #include<cmath> 3 #include<algorithm> 4 #in
阅读全文
摘要:T1 方案统计 题目大意: 给出一棵n个节点的无根树,其中m个节点是特殊节点,求对于任意0<=i<=m,包含i个特殊节点的联通块个数 思路: 树形dp dp i j表示以i为根的子树 包含j个特殊节点的联通块个数 转移就是枚举该节点任意两个子树 dp i j+k += dp to[i] j * dp
阅读全文
摘要:题目大意: 无向图上找三个点 a b c使存在一条从a到b经过c的路径 求取这三个点的方案数 思路: 建立圆方树 这个圆方树保证没有两个圆点相连或两个方点相连 对于每个节点x 设该节点为路径的中间节点 则a c要么同在一个子树内 要么一个在子树内另一个在子树外 最后对答案<<1 对于每个方点设val
阅读全文
摘要:T1 note 数组开小 菜的真实 60分 题目大意: 一个字符串 分成若干段 使每段内都没有重复的字符 求最少的段数 思路: 可以贪心 1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstdlib> 5 #
阅读全文
摘要:题目大意: 每个骑士都有且仅有一个自己最厌恶的骑士(当然不是他自己)和他自己的战斗力 从所有的骑士中选出一个骑士军团,使得军团内没有矛盾的两人(不存在一个骑士与他最痛恨的人一同被选入骑士军团的情况) 并且,使得这支骑士军团最具有战斗力 思路: 又题目可知 把图连出来之后是一些树上带一个或不带环 对于
阅读全文
摘要:题目大意: 一个森林,将一些点染色,使所有边都只至少有一个端点被染色 使被染色的点尽可能少,在这个前提下,使两端都被染色的边尽可能多 输出染色的点数,两端被染色的边数,一端被染色的边数 思路: 树形dp[i][0/1] 后一维表示它的父亲是否被染色 但是要用到一个骚操作,因为要使两端都被染色的边尽可
阅读全文
摘要:题目大意: 一棵树,给定根节点,可以给某些边加上一些权值,每加一,答案加一 求最小答案使根节点到每个叶子节点路径上的权值和相 思路: 树形dp 对于每个节点,dp表示到该节点的所有叶子节点 满足题目的最小答案 转移可以根据它所有子节点转移 1 #include<iostream> 2 #includ
阅读全文
摘要:第一次140,好好的200 mmp 因为T1少写一个取MOD T1: 一棵黑白树,已知原先树上共n 个点,每个点都是黑点或者白点,切去若干条边后,分成的若干个连通子树中每块恰有一个黑点,请问有多少种切树的方案满足这个条件 两种方案不同当且仅当存在一条边在其中一个方案中被切而在另一个方案中没被切 思路
阅读全文