随笔分类 -  基础算法--贪心

摘要:"传送门" 先考虑树,树是一个二分图。 看到是二分图并且每次是对两边的同色的点反色可以想到转化:让奇数层的点为黑,偶数为白,变成每次可以交换两个点的颜色。 把黑看成 $ 1$,白看成 $1$,那么求一个子树和,考虑每一条边的贡献可以得到 $ans=\sum_{i=1}^{n} |sum_i|$ 如果 阅读全文
posted @ 2019-03-02 16:44 Cyhlnj 阅读(260) 评论(0) 推荐(0)
摘要:"传送门" 第一步转化,令 $q[p[i]]=i$,那么题目变成: 有一些 $q[a[i]] using namespace std; typedef long long ll; const int maxn(5e5 + 5); int n, a[maxn], w[maxn], vis[maxn], 阅读全文
posted @ 2019-02-20 17:54 Cyhlnj 阅读(219) 评论(0) 推荐(0)
摘要:"传送门" 不难看出期望就是 $\frac{(n+m)!}{\prod_{v=1}^{max}(cnt_v!)}$,$cnt_v$ 表示 $v$ 这个数出现的次数。 贪心就是直接把 $m$ 个数字每次选择一个 $cnt$ 最小的加入,使得最后 $[l,r]$ 内每个数字出现的次数尽量平均。 直接按照 阅读全文
posted @ 2019-02-20 10:36 Cyhlnj 阅读(219) 评论(0) 推荐(0)
摘要:"传送门" 先处理出每一件衣服最早什么时候洗完,堆+贪心即可 然后同样处理出每件衣服最早什么时候烘干 然后倒序相加取最大值 cpp include using namespace std; typedef long long ll; const int maxn(1e5 + 5); int l, n 阅读全文
posted @ 2019-01-25 16:33 Cyhlnj 阅读(262) 评论(0) 推荐(0)
摘要:"传送门" 直接贪心 考虑到 $n$ 个人的贡献都是 $a_i$,另外 $m$ 个人的贡献都是 $c_i b_i$ 首先 $a_i b_j$ 的限制不好做,所以将 $a,b$ 从小到大排序 枚举 $a_i$ ,每次把小于 $a_i$ 的 $b$ 加入优先队列,只要从中间选一个最大的匹配,之后将 $ 阅读全文
posted @ 2019-01-18 12:36 Cyhlnj 阅读(283) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol 也是拿出一些数,使剩下的异或起来不为$0$ 而线性基内的数异或不出$0$ 那么从大到小加到线性基内 然后中途为$0$了,就取走它 这样我们使最大的在线性基内,剩下的是小的,那么这样贪心是对的 然后怎么可能无解,随便剩下一个就是一种方案 cpp include define 阅读全文
posted @ 2018-03-27 17:32 Cyhlnj 阅读(140) 评论(0) 推荐(0)
摘要:题意 "见luogu" Sol 贪心 从小到大枚举高度,把小于等于这一高度的相邻格子用并查集合并 那么这个集合内的所有格子都一定可以由这个集合内的一个最低点抽完水 那么合并之后(一定要在合并之后) 判断这一高度是否有城市,有则检查它所在的集合是否放了抽水机,没有就在这个集合中放一个 cpp incl 阅读全文
posted @ 2018-02-24 17:06 Cyhlnj 阅读(135) 评论(0) 推荐(0)
摘要:题意 "见luogu" Sol 贪心+枚举 如果知道最后一次是消除一行 那么一定消了$n$行 此时只要消的列最小就好了 枚举每列从上往下消到哪里,那么下面消的越小越好 那么就有了贪心策略: 先消左右的列,再消上面,再消下面 最后一次消列的情况是一样的 cpp include define RG re 阅读全文
posted @ 2018-02-24 17:00 Cyhlnj 阅读(131) 评论(0) 推荐(0)
摘要:题面 "传送门" Sol 这道题卡空间。。。 先模拟出T,大力贪心,每次选最小的走显然最优 那么选了$(i, j)$它上面都只能选第$j$列以前的,它下面都只能选第$j$列以后的 每次选最小,更新每行能选的区间,判断即可 include define RG register define IL in 阅读全文
posted @ 2018-01-21 22:31 Cyhlnj 阅读(144) 评论(0) 推荐(0)
摘要:按位从高往低贪心,枚举到第i位,只需要判断这2^i长度的区间是否有菜,用主席树就可以了 # include <bits/stdc++.h> # define RG register # define IL inline # define Fill(a, b) memset(a, b, sizeof( 阅读全文
posted @ 2017-12-30 14:41 Cyhlnj 阅读(152) 评论(0) 推荐(0)
摘要:luogu题面 这道题是NOI起床困难综合症改编而来的 思路是一样的 这道题我们考虑用LCT维护,每个节点维护两个值 一个为中序遍历这棵子树的ans0,ans1(分别表示0和INF(二进制下全为1)跑的答案) 另一个为中序遍历的反向遍历这棵子树的ans0,ans1 还要记得保存这个点的初始操作 考虑 阅读全文
posted @ 2017-12-30 09:01 Cyhlnj 阅读(180) 评论(0) 推荐(0)
摘要:从高位往地位贪心即可 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; typedef 阅读全文
posted @ 2017-12-20 22:23 Cyhlnj 阅读(185) 评论(0) 推荐(0)