摘要:
题面 "题目传送门" 解法 这道题建图还是挺妙妙的 显然答案满足单调性,直接二分答案,假设当前答案为$mid$ 考虑将每一个人拆成2个点,一个表示喜欢,另一个表示不喜欢 将$s$连向男生喜欢,容量为$mid$,男生喜欢连向男生不喜欢,容量为$k$ 女生类似 然后对于男生$i$和女生$j$,如果不互相 阅读全文
摘要:
题面 "题目传送门" 解法 感觉这道题解法妙妙的 考虑这样一个贪心,记一个三元组$(x,l,r)$表示当前和弦的左端点为$x$,右端点在区间$[l,r]$ 那么这个三元组对应的和弦最大值为$max(s_l,…s_r) s_{x 1}$,其中,$s_i$表示前缀和 考虑将这些三元组扔进一个大根堆里,按 阅读全文
摘要:
题面 "题目传送门" 解法 给个链接,贪心和树形dp讲得挺到位的 "题解" 反正我觉得贪心比较好写,也挺好理解的 时间复杂度:$O(Tn)$ 代码 cpp include define N 10010 using namespace std; template void chkmax(node &x 阅读全文
摘要:
题面 "题目传送门" 解法 显然,这个游戏可以拆成多个游戏的和 那么,我们就可以使用SG定理 定义$SG(x,y)$表示同一组石子中分别有$x$个石子和$y$个石子的$SG$值 发现$x,y≤10^9$,然后打表找规律 可以发现,若$x,y$都为奇数,那么$SG(x,y)=0$ 否则,$SG(x,y 阅读全文
摘要:
题面 "题目传送门" 解法 直接求三角形个数似乎并不好求 那么我们不妨考虑补集转化,即$ans={nm\choose3}$ 三点共线的个数 三点共线分别为在行上,在列上,以及斜着的 斜着的只要枚举斜率是什么,然后就很好求了 代码 cpp include define int long long us 阅读全文
摘要:
题面 "题目传送门" 解法 把$S$集看作和羊连接,$T$看作和狼连接 然后就转化成了基本的最小割模型了 对于0的处理,可以把它放在羊和狼两排点的中间,由$S\rightarrow$羊$\rightarrow0\rightarrow$狼$\rightarrow T$ 然后跑dinic即可 代码 cp 阅读全文
摘要:
题面 "题目传送门" 解法 ~~MLE了23333~~ ~~为什么空间不给256MB,这样我就能开几个5000 5000的数组了~~ 考虑一种树形dp的方法吧 $f_{i,j}$表示从点$i$向下走$j$步并选出两个不在$i$同一个子树的方案数,$g_{i,j}$表示从$i$出发在$i$子树外走$j 阅读全文
摘要:
题面 "题目传送门" 解法 挺恶心的题 考虑动态点分治,先建出点分树 然后每一个点开两个堆,分别为$a,b$ $a_i$表示点分树上$i$子树中所有节点在原树上和点分树中$i$父亲的距离,$b_i$表示点分树中$i$所有儿子的堆顶 再开一个堆$ans$,存每一个$b_i$最大和次大值的和 在修改的时 阅读全文
摘要:
题面 "题目传送门" 解法 显然可以二分答案 计算的时候用容斥原理即可 用莫比乌斯函数实现这个过程即可 代码 cpp include define LL long long define N 1000010 using namespace std; int f[N], p[N], mu[N]; vo 阅读全文
摘要:
题面 "题目传送门" 解法 考虑容斥原理 显然,我们可以枚举有多少个人没有收到 然后就转化成一个组合问题了 假设现在有$x$个物品,$n$个人,可以有人没有被分到,那么分给这$n$个人的方案数为$n+x 1\choose n 1$ 然后就是分别计算一下就可以了 时间复杂度:$O(nm)$ 代码 cp 阅读全文