首页 > TAG信息列表 > Siz
9.15-CSP-S开小灶4
T1 山洞 比较简单但是我脑子抽了绕了半天弯。 朴素dp是很好写的 $ dp[i][j]= dp[i-1][j-i]+dp[i-1][j+i] ,(j-i \neq j+i)$ 考虑优化,我们可以先暴力推出前n步(当然最大可以推到10000步好像也没问题),然后我们一次走n步,这样会一共走m/n次,然后剩下m%n次仍然暴力推就行。中间一次走nP3871 [TJOI2010]中位数
简要题意 你需要维护一个初始长度为 \(N\) 的序列 \(A\),有 \(M\) 个操作,支持: add a 在 \(A\) 末尾插入一个数 \(a\)。 mid 求 \(A\) 的中位数中位数是指将一个序列按照从小到大排序后处在中间位置的数。(若序列长度为偶数,则指处在中间位置的两个数中较小的那个) \(1 \le N \le 10^CF620E NewYearTree
题目链接 主要要实现区间覆盖和区间查询不同数,看见区间赋值操作可能会想到\(ODT\)来实现,区间查询不同数直接另外开一个数组记录一下就好了,但很可惜\(TLE\)了,代码如下: struct ODT { struct Node { i64 l, r; mutable i64 v;CF603E Pastoral Oddities
CF603E Pastoral Oddities 给定一张 \(n\) 个点的无向图,初始没有边。 依次加入 \(m\) 条带权的边,每次加入后询问是否存在一个边集,满足每个点的度数均为奇数。 若存在,则还需要最小化边集中的最大边权。 \(n \le 10^5,m \le 3 \times 10^5\)。 首先观察题目条件,发现 \(n\) 的大小洛谷 P8496 [NOI2022] 众数 题解
最近 7 年最水的 D1T1。 用权值线段树维护每个数出现的次数,链表维护序列。 操作 4 即合并两棵权值线段树、两个链表,操作 2 就是删除链表尾的元素并在权值线段树上修改。 显然,如果一个序列存在绝对众数,那么它必然等于这个序列的中位数。所以操作 3 就是询问 \(k\) 个序列整体的中位圆方树
狭义圆方树 任意一条边至多只出现在一条简单回路的无向连通图称为仙人掌。 我们对每一个简单环建一个方点。 然后这个环上的所有点与这个方点连边,同时删除原先环上的边 自此我们就建成了一颗狭义圆方树。容易发现不存在相邻的两个方点 P5236 【模板】静态仙人掌 给你一个有 \(nARC103E题解
思路很奇怪(?) 考虑是否合法的条件。注意到这个显然要求对称(即存在 \(i\) 必须存在 \(n-i\)),如果不满足一定无解。 然后比较显然的是 \(1\) 不存在和存在 \(n\) 都无解。 然后注意到应该要满足一个 \(F=x\sum F^k\) 之类的 \(0/1\) 卷积。 然后发现,如果存在 \(1\) 那这个是不是一定能luoguP3521 [POI2011]ROT-Tree Rotations【线段树】
你要写热,就不能只写热。 要写酷暑,写骄阳,写他人耳闻便生恐的炙烤和炎灼。 要写白日出门一刻便肤色黝黑,背心透彻。 写求雨心切,写出行伞遮。 写夜晚不停的风扇和蝉聒。 写鸡蛋落地便熟,流水转眼耗涸。 再写千家万户空调响,西瓜冰可乐。 直至最后,才猛然起身,把浑身上下的黏腻腻,涓涓水冲SP2420 题解
SP2420 solution 给定一颗 \(n\) 个节点的树,在树上找一条长为 \(l\) 的链,使得树上每个节点到链的距离之和最短,求这个最短距离。 题解 首先我们思考多个点到一个点距离和怎么计算。可以考虑使用树形 DP,将这个点作为跟,记录 \(siz_u\) 为 \(u\) 点子树的大小,\(sum_u\) 为 \(u\) 点Codeforces Round #812 (Div. 2) E(并查集)
种类并查集:定义种类之间的关系来判断操作是否进行 题目大意:对于题目给出的一个矩阵,我们可以进行一种操作:swap(a[i][j],a[j][i]) 使得矩阵可以变换为字典序最小的矩阵 思路: 通过扫描整个矩阵,每次都判断a[i][j] 和 a[j][i]是否需要交换 交换的前提就是: 对第i行/第j列操作Fhq-Treap 模板
namespace Fhq_Treap { int ch[N][3], siz[N], val[N], cnt, rnd[N]; inline void update(int x); inline int newnode(int x); inline int Kth(int now, int k); inline void split(int now, int k, int &x, int &y); inline int merge(int A, int B); inline voi来自学长的馈赠6 社论
A. ^_^ 期望线性性,考虑染一个点 \(u\) 当且仅当其子树内的点都没被染过,于是期望为 \(\dfrac1{siz(u)}\) . 于是答案就是 \(\displaystyle\sum_{i=1}^n\dfrac1{siz(i)}\),需要线性求逆元 . B. 软件包管理器 大力树剖 . C. 地理课 线段树分治 + 可撤销并查集 . D. 道路和航线 大家好,CF1336A
题目简化和分析: 明确一点这是一棵树。 为了保证每个工业城市的设置效益最大,应该设在最深的节点。 从深到浅,可以使用优先队列去实现。 设置一个的价值为 \(dep_u-siz_u-1\)。 关于作者一开始想反了,设置旅游城市,虽然可以做,但非常麻烦,于是看了别人大佬思路才明白。 错误原因在于,有可数据结构
平衡树 我们需要维护一种数据结构,支持以下操作:插入值,删除值,查询数在集合中的排名,查询排名为 \(k\) 的数,求某个数的前驱与后继。 我们可以用二叉搜索树维护,但是可以被卡成 \(O(n)\) ,那么我们要用到另外一种数据结构,即平衡树来维护这些操作。 平衡树种类较多,这里仅介绍其中的Splay、树的重心和直径
一.树的重心 定义:一个顶点,子树最大siz最小的 性质: (1)**多个点到一个点的距离和最小,这个点是重心 比如医院入住,先求出每个点到1的花费,f[1],推f[son1]时,考虑 每个son1上的点少走了siz[son1]步,其他的多走了totsize-siz[son1]步 f[son1]=f[1]+f[1]-f[son1]-f[son1] (2)**重心<=2,而且一定平衡树 学习笔记
\(\mathtt{Treap}\) 相较于普通的二叉搜索树,平衡树更优的点在于在二叉搜索树的基础上又给每个节点随机赋了一个优先级,并按照优先级维护一个小(或大)根堆,这样能大大减少查询时的复杂度。 \(\mathtt{Treap = Tree + Heap}\) \(\mathtt{Treap}\) 的主要特点就是通过旋转的操作去维护平树链剖分学习笔记
目录概述基本概念预处理操作dfs1dfs2具体处理问题1.LCA问题P3379 【模板】最近公共祖先(LCA)Game2:简单树上问题P4281 [AHOI2008] 紧急集合 / 聚会P5903 【模板】树上 k 级祖先2.单点修改,链上求值P2590 [ZJOI2008]树的统计 概述 树链剖分(轻重链剖分)是一个将树上问题转换为序列上问题2022.7.16 lhm_ 讲课纪要
前言 啊好的,这节课又是对牛弹琴课。。。。。。 虽说题给的不难,以黄绿为主,,穿插了一个蓝一个紫,但是给一群不知道什么是树什么是DAG的人讲树形dp和dag上dp有点。。。。 顺便讲了讲拓扑排序和记忆化搜索 ORZ%%% lhm学长 正文 P6419 [COCI2014-2015#1] Kamp 应用换根 DP 的思路,先考虑只20220713树剖
A 树剖求lca 板子 C 一道树剖板子题 D 树剖题单里混进了一个奇怪的东西 根号分治 对于跳的步长大于sqrt(n),我们直接暴力跳就行了 而步长小于时维护从某点一直以某一步长跳到根的和,然后使用差分求得答案。 点击查看代码 #include<bits/stdc++.h> #define M 50005 #define N 250 us平衡树
平衡树 算法简介 平衡树是一种支持 插入一个整数 x。 删除一个整数x(若有多个相同的数,只删除一个)。 查询整数 x 的排名(排名定义为比当前数小的数的个数 +1)。 查询排名为 x 的数(如果不存在,则认为是排名小于 x 的最大数)。 求 x 的前驱(前驱定义为小于 x,且最大的数)。 求 x点分治
int siz[Z], kid[Z], root, size;//kid[rt]:该点的最大子树的大小 bool vs[Z]; void getroot(int rt, int fa)//求树的重心 { siz[rt] = 1, kid[rt] = 0; for (re i = head[rt]; i; i = e[i].ne) { int son = e[i].v; if (vs[son] || son == fa) conti「AHOI2022」钥匙
想搞成一个好维护的形式,这个 \(5\) 把钥匙要用起来。 那首先考虑一点实现的问题,我们对同一种颜色建出虚树,然后以每个钥匙为根遍历一遍整棵树考虑造一点信息。 先看到 A 性质,猜测我们要通过一些特殊的匹配方式变成一条路径如果被包含则答案加一。 ※ 那么考虑用栈储存钥匙,每次用栈题解-ARC103F
看到是ARCF和AT的评分差点被劝退,但是仔细想了想发现不是很难。 首先考虑 \(D\) 最大的那个一定是叶节点,这个可以用反证法来证明,肯定有一个叶节点比所有非叶节点更优。然后我们考虑取出最大的那个,我们既然已经知道它是叶节点了就可以算出他的父亲的 \(D\),假设它是 \(x\) 号节点,那么321 树的重心
视频链接: #include <iostream> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int N=100010; int n, a, b; vector<int> e[N]; int siz[N], pos, ans=1e9; void dfs(int x, int fa){ siz[x]=1; i最近一些题的题解
1. 摩尔庄园 用树形 dp 模拟网络流。 记 \(a\) 为 \(x\) 走向 \(fa(x)\) 的次数,\(b\) 为 \(fa(x)\) 走向 \(x\) 的次数,\(flw(x) = a - b\)。 这样在从 \(x\) 走向 \(fa\) 时: 如果 \(flw(x) < 0\),表示有更多次从 \(fa\) 走向 \(x\),那么这一次费用为 \(-1\),表示和之前一次从 \(fa\)