上一页 1 ··· 3 4 5 6 7 8 9 10 11 12 下一页
摘要: 其实就是对每个子树找到最多能派遣的人数乘这个子树根的领导力。 但是n和m的范围不能跑树上背包。 对每个子树维护一个堆,把所有节点的佣金扔到大根堆里面。sum大于m就把堆顶pop掉。堆的size就是最多的人数。 关键是几棵子树怎么合并,直接启发式合并,就是这样。 #include<bits/stdc+ 阅读全文
posted @ 2022-04-14 22:22 qingyanng 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 题意: 给出一个长度为n的01串,可以做一次操作:选择恰好含k个1的字串,给这个字串重新排序。问可以得到多少种串。 对于一个字串的排序方案是多重集排列,len!/(zero!* one!) 或者说组合数C(len,one) 显然,对于选择一次恰好含k个1的字串,要选择极长的比如01100的方案包含了 阅读全文
posted @ 2022-04-14 20:33 qingyanng 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 较强限制:"jz"才有贡献; 交换操作。 考虑DP:考虑缩小规模->那么dp数组要维护一个 前i个字母,交换了k次,当前的数交不交换。但是如果 pos1和pos2是互相交换的,但是这俩位置会计入k两次,所以把交换了k次变成'j'字母交换了j次,'z'字母交换了l次数。这个状态方程好像没问题,但是转移 阅读全文
posted @ 2022-04-13 20:40 qingyanng 阅读(17) 评论(0) 推荐(0) 编辑
摘要: https://codeforces.com/problemset/problem/1648/C 题意: 给出两个数列A和B。给A重新排序使得A的字典序小于B。 思路: #include<bits/stdc++.h> using namespace std; #define IOS ios::syn 阅读全文
posted @ 2022-04-12 15:21 qingyanng 阅读(40) 评论(0) 推荐(0) 编辑
摘要: https://codeforces.com/problemset/problem/1620/E 题意: 初始为空的数组,有两种操作:1 :在后面加一个数x 2:把所有的x改成y。 n和x,y的范围都在5e5内。 对于所有的x改成y这个操作,给每个数字设一个id,然后修改id这样是不行的,因为后面新 阅读全文
posted @ 2022-04-11 20:33 qingyanng 阅读(29) 评论(0) 推荐(0) 编辑
摘要: https://atcoder.jp/contests/abc247/tasks/abc247_f 题意: 给出一组卡片,每张卡片有正反两面。正面有1-n的排列,反面也有。让选择一写卡片使得这些卡片两面的数字能凑够1-n。 这种pair的问题要能想到置换群 置换可以分出若干个环,环与环之间直接乘法原 阅读全文
posted @ 2022-04-11 10:55 qingyanng 阅读(58) 评论(0) 推荐(0) 编辑
摘要: https://codeforces.com/contest/1661/problem/D 题意: 给出初始全零的a数组,和b数组,每次操作可以选择完整的长度为k的一段加上1,2,3...k.问最学要多少次操作才能使所有ai都大于bi。 思路: 这里有一个比较强的限制:选择完整的长度k的一段修改,这 阅读全文
posted @ 2022-04-11 09:28 qingyanng 阅读(78) 评论(0) 推荐(0) 编辑
摘要: 树上背景,要凑p个点,我们想到背包。 但是这个体比较异类,要删点 还是背包那样dp[j] ← dp[j - k] + dp[k], 显然是f[u][j] = min(f[u][j], f[u][j - k] + f[v][k] - 1);表示以u为根的子节点保留j个点再本棵子树最少删的边 考虑边界和 阅读全文
posted @ 2022-04-09 21:39 qingyanng 阅读(25) 评论(0) 推荐(0) 编辑
摘要: https://codeforces.com/contest/1611/problem/F 负了就停止,这使得问题有了单调性,使用双指针 双指针模版 //初始为空 int l = 1, r = 0; ll sum = 0; for ( ; l <= n; ++ l ) { r = max(l - 1 阅读全文
posted @ 2022-04-05 17:13 qingyanng 阅读(26) 评论(0) 推荐(0) 编辑
摘要: 二分图最大匹配 最多取多少条边,满足卡片不重叠--所有选出的边没有公共点--二分图放最多的牌--找到最多的边--二分图上最大匹配。 一条直线的两个端点要被分到两个集合,x+y值是奇数的在一个集合,是偶数的在一个集合。然后二分图最大匹配就行了,每次扫奇数点 #include <bits/stdc++. 阅读全文
posted @ 2022-04-05 09:48 qingyanng 阅读(42) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 12 下一页