摘要: Solution Part1 子树操作,可以用DFS序解决。 这一题,我们实际上只用将叶子节点按DFS序从小到大排列,将其编号为1...n(n为叶子数量)。 对于点u,它控制的区间就是[cnt + 1,cnt + siz[u] + 1],cnt表示比u的DFS序小的叶子的数量,siz[u]表示u的子 阅读全文
posted @ 2021-08-10 20:10 kjd123456 阅读(26) 评论(0) 推荐(0) 编辑
摘要: Solution 每个子树都对应DFS序上的一段区间。 发现所有操作要么只针对子树,要么只针对单个节点,因此我们可以利用DFS序将树上的操作转化为区间上的操作。 当我们更新节点 \(u\) 时,对于他的子节点 \(i\),它的变化值为$x-(dep[i]-dep[u])*k=x+dep[u]*k-d 阅读全文
posted @ 2021-08-02 23:33 kjd123456 阅读(57) 评论(0) 推荐(0) 编辑
摘要: 组合游戏 当一个游戏满足如下几个性质: 1.每个人都足够聪明 2.游戏可以化归到有向无环图上 3.游戏的内容是确定的 则称这个游戏是组合游戏 Solution 该题中的游戏很明显是个组合游戏,另外题目中有条件“菲菲和牛牛都希望,自己的得分减去对方的得分得到的结果最大”,如果菲菲的贡献为正,牛牛的贡献 阅读全文
posted @ 2021-07-09 13:48 kjd123456 阅读(41) 评论(0) 推荐(0) 编辑
摘要: #include <bits/stdc++.h> using namespace std; int main() { map<char,int> mp; mp['a']++; if (mp['b'] == 0) printf("OK"); printf("%d\n",(int)mp.size()); 阅读全文
posted @ 2021-07-08 00:06 kjd123456 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 题目地址 这里 Solution 一道比较简单的二分 先分析一下题目性质:任意城市被敌军占领,其周围城市的安全度都会降低$\implies$ 我们在选取城市时,应遵循这样一个原则:所有能够被己方控制的城市都应当让己方控制。 这里的“能够”当然只在二分答案的限制下才有意义。 那么,解决方法就很简单了。 阅读全文
posted @ 2021-02-05 16:55 kjd123456 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 记录一下位运算的常见操作 把x右边连续的1变成0: x & (x + 1) 把x右边连续的0变成1: x | (x - 1) 把x右边的第一个0变成1: x | (x + 1) 取出x右边连续的1: (x ^ (x + 1)) >> 1 遍历x的子集: for (int i = x; i; i = 阅读全文
posted @ 2021-01-24 15:21 kjd123456 阅读(94) 评论(0) 推荐(0) 编辑
摘要: 我又复活啦!!! 题目链接 这里 题目描述 给定一个长度为$n$的序列$a$,定义$a_i$ 为第$i$个元素的价值。现在需要找出序列中最有价值的“段落”。段落的定义是长度在$[S, T]$之间的连续序列。最有价值段落是指平均值最大的段落。 段落的平均值等于段落总价值除以段落长度。 输入格式 第一行 阅读全文
posted @ 2021-01-23 23:08 kjd123456 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 最开始还是信仰剪枝函数调用次数设成1e7过的... 后来想了想,优化了一下暴力就过了 题目地址 爆搜+优化的讲解: 将每个字符串的首字母向尾字母连一条边,边的长度为字符串的长度,答案就是每条边最多只经过一次时,图上的最长路。 看一下以下数据: 4 EAAAAE EAAAAAE EAAAAAAAE E 阅读全文
posted @ 2020-04-04 00:06 kjd123456 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 题目地址 通过观察可得: 1.一个强连通分量为一个半连通子图 2.一条链为一个半连通子图 执行$tarjan$算法缩点后,得到的图是一个DAG,使每个点的权值为这个点所包含的点数,问题就转化成了求DAG上的最长链(链上的点权值和最大)的大小和个数。 既然是DAG,很明显可以想到DP。 $f[u]$为 阅读全文
posted @ 2020-04-01 23:15 kjd123456 阅读(118) 评论(0) 推荐(0) 编辑
摘要: 题目地址 第一步当然是分类: $1.$有一条从$1$到$n$的路径且路径经过的边的数量小于等于$k$,那么最小费用为$0$。 判断方法:将所有边的边权设为$1$,进行并BFS,时间复杂度为$O(n)$。 $2.$若所有从$1$到$n$的路径经过的边数均大于$k$,则求出所有路径上第$k+1$大的边的 阅读全文
posted @ 2020-03-10 12:00 kjd123456 阅读(160) 评论(0) 推荐(0) 编辑