上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 39 下一页
摘要: 题目大意:给定一个长度为 N 的序列,求是否能够从序列中选出一个集合,使得这个集合按照特定的顺序排成一个环后,环上相邻的点之间的权值差的绝对值不超过 1。 题解:集合问题与序列顺序无关,因此可以先将序列排序。 可以发现,题目中描述的环,拆成序列之后应该满足 $a_l,a_{l+1},...,a_{r 阅读全文
posted @ 2019-04-28 00:14 shellpicker 阅读(372) 评论(0) 推荐(1) 编辑
摘要: 题目大意:对于一个顺序序列,求一个合法置换,可以满足一些约束,若存在多个合法置换,则输出字典序最小的一个置换。 题解:对于序列的置换是否有解的问题,可以和二分图的完美匹配相关联。由于是字典序最小,显然需要贪心考虑。在匈牙利算法执行的过程中,对于每个点来说,可以优先匹配符合条件的最小的点;对于左边点集 阅读全文
posted @ 2019-04-27 16:51 shellpicker 阅读(95) 评论(0) 推荐(0) 编辑
摘要: 题目大意:康托展开和逆康托展开模板题。 题解: 注:20!约为 2e18。 代码如下 cpp include using namespace std; const int maxn=21; typedef long long LL; char s[4]; LL n,q,a[maxn],fac[max 阅读全文
posted @ 2019-04-26 18:02 shellpicker 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个 N N 的矩阵,有些格子是 1,其他格子是 0。现在允许交换若干次行和若干次列,求是否可能使得矩阵的主对角线上所有的数字都是1。 题解:首先发现,交换行和交换列之间是相互独立的。主对角线上是 1 意味着每行都对应着相应的列。现在考虑 1 是行和列之间的边,若对于这张二分图存在一个 阅读全文
posted @ 2019-04-26 12:50 shellpicker 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有三个集合 $P,Q,N$,P 与 N 集合之间存在一些有向边,N 与 Q 集合之间存在一些有向边。在三个集合中每个点最多只能利用一次的前提下,求最多能利用多少N 集合中的点,使得 $(p,n,q)$ 三个节点之间均有边相连。 题解:若只有两个集合,显然是二分图的最大匹配问题。对于三个集合 阅读全文
posted @ 2019-04-25 23:17 shellpicker 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 题目大意:二分图匹配裸题。 题解:用网络流进行处理。 找配对方案的时候,采用遍历二分图左边的每个节点,找到不与源点相连,且正向边权值为 0,反向边权值为 1 的边,输出即可。 代码如下 cpp include using namespace std; const int maxn=110; cons 阅读全文
posted @ 2019-04-25 20:22 shellpicker 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定 N 个点和一些有向边,求是否能够将这个有向图的点分成两个集合,使得同一个集合内的任意两个点都有双向边联通。 题解:反向思考,对于没有双向边的两个点一定不能在同一个集合中。因此,构建一个图,若两点之间有边,则表示这两个点不能在同一个集合中。进行二分图染色判定即可,若是二分图,则满足条件 阅读全文
posted @ 2019-04-25 19:43 shellpicker 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个 N N 的矩阵,点有点权,现进行 k 次从左上角到右下角的寻路操作,对于每个点可以向右或向下走。每走到一个点,若之前没走过这个点,答案加上该点点权。求进行 k 次操作后,可以获得的最大点权和是多少。 题解:对于每个点都有一个权值,且权值只能被使用一次,同一个点最多可以经过 k 次 阅读全文
posted @ 2019-04-25 15:07 shellpicker 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 题目大意:给定一个 N 个点的无向图,求至少删去多少个点可以使得无向图不连通。 题解:学习到了点边转化思想。 根据网络流的知识可知,一个网络的最小割与网络的最大流相等。不过最小割是图的边集,而本题则是删去节点。考虑将一个节点拆分成两个节点,即:入点和出点,对于同一个节点,在入点和出点之间的边权为 1 阅读全文
posted @ 2019-04-25 10:11 shellpicker 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 学会了 $Dinic$ 算法。 Dinic 算法的核心思想是多路增广。相比于 EK 算法,Dinic 算法利用了分层的思想,每次都寻找最短路径的增广路。时间复杂度为 $O(n^2m)$。 代码如下 cpp include using namespace std; const int maxn=1e4 阅读全文
posted @ 2019-04-24 21:34 shellpicker 阅读(138) 评论(0) 推荐(0) 编辑
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 39 下一页