摘要:
此题的二分图匹配做法很容易想,就是把属性当做s集,武器当做t集,如果该武器拥有该武器则连一条边。 那么答案就是求该二分图的最大前i个匹配。将匈牙利算法改一改,当前找不到增广路就break。 但是过这个题需要常数优化,不能每次都fillchar一遍used数组。可以用队列将使用的used点加入,然后需 阅读全文
摘要:
对于第一问,直接求最大流。 对于第二问,建源点s和汇点t,s连1容量为INF,费用为0的边,n连t容量为最大流+k,费用为0的边。这样就把最大流限制为最多增加k了。 限制需要求扩充的最小费用,原图的边多连一条容量为INF,费用为增容费用K的边。跑一遍费用流即是答案。 # include <cstdi 阅读全文
摘要:
将第i个用户和他需要的基站连边,转化成求二分图的最大权闭合子图。 答案=正权点之和-最小割。 # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream> # include <vector> # in 阅读全文
摘要:
题意:给出一颗标号为1-n的树,求每个节点的子树节点的标号有多少小于该节点的标号。 此题DFS序+主席树过不了,内存太小。。。 看到子树很容易想到树的DFS序,把树转一下DFS序就是求n个区间,每个区间的数字小于k的数目的问题了。 显然可以用主席树,但是内存还是太蛋疼。。。 如果发现这个序列是一个全 阅读全文
摘要:
对于该题,离线的做法是树状数组或者线段树。 如果强制在线的话,可以用主席树做到O(mlogn)。 考虑到这样一个性质,对于询问[l,r]出现的数字种数。其答案就是to[i]>r的数字数。 其中to[i]表示的是第i个数的下一个相同的数出现的下标,没有则=n+1. 很幸运这个性质是满足区间减法的,也就 阅读全文