摘要:
###1.问题 L是n个无序元素的集合,从L中选取第k小的元素。 ###2.解析 可以通过分治策略来解决。 1、以 \(L\) 中的某个元素 \(pos\) 作为基准元素,将 \(L\) 划分为两个集合 \(L1,L2\) ,其中 \(L1\) 中的元素都比 \(pos\) 小或等于 \(pos\) 阅读全文
摘要:
###问题 对n个不同的数构成的数组 A[1..n]进行排序,其中 n=2^k。 排序方法使用二分归并排序。 ###解析 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并 阅读全文
摘要:
###问题 在给定的一个集合中找到一个给定的值,并且该集合是已经拍过序的。 ###解析 1、暴力检索 很容易想到可以从前到后一个一个去查找给定的值,遇到给定的值输出答案即可。 2、二分检索 对于一个有序的数组,那么这个数组就是单调的,已知其单调递增后,就可想到二分检索。每次查找mid下标下的值,如果 阅读全文
摘要:
###问题 给出一幅有n个顶点,m条边构成的图,求解各个顶点之间的最短距离。 ###解析 Floyd 算法: Floyd 算法的本质是动态规划。我们考虑两个点之间的最短路径只有两种可能, 第一种:起点直接通过一条路径到达终点。第二种:从一个点出发经过若干个别的点,然后到达终点。 那么我们就可以通过枚 阅读全文
摘要:
###题意: 题目给出一棵树,然后给出 \(K\) 对点,每对点表示在树上的一条简单路径,问这 \(K\) 对点共同覆盖的节点有几个。 ###想法: 考虑树上 \(lca\) 的一个性质:树上两条路径的交点,只存在这两条路径的起始点的两两之间的 \(lca\) 的深度最深的两个点所构成的路径。如 \ 阅读全文
摘要:
###Solved C、Evolution Game D、Bus Stop E、How Many Groups G、Communication H、As Rich as Crassus J、Floating-Point Hazard K、The Stream of Corning 2 L、Large 阅读全文
摘要:
##问题: 给出由 \(n\) 个点, \(m\) 条边构成的一幅无向图,分别用Prim算法和Kruskal算法构造一棵最小生成树。 ##解析: ####Prim算法: 从任意一个顶点开始生成最小生成树,每次选择和当前已经构成的树的最小边,把最小边连接的顶点加入到树中,直到所有顶点都被加入。 图示: 阅读全文
摘要:
###Solved Problem A. Coffee Break Problem B. Glider Problem C. Bacteria Problem D. Masquerade strikes back Problem E. Painting the Fence Problem F. Ti 阅读全文
摘要:
###定义 给出 \(n\) 个集合,每个集合都有两个元素,已知若干对 \(<a,b>\)($a,b$属于不同的集合)不能同时出现,从每个合集都选一个元素,判断能否在 \(n\) 个集合里选出 \(n\) 个元素。 ###解决方法: 建有向图。对于某一个条件如 \(a\vee b\) 为真,我们可以 阅读全文
摘要:
题意: 题目给出 \(q\) 个询问,问有向图上 \(u\) 是否可以到达 \(v\),其中图上的边 \(u\rightarrow (u+v)\) 存在的条件是 \(u\&v=v\) 。 想法: 考虑条件 \(u\&v=v\) 如何才能成立,发现只要对于二进制位上的 \(1\), \(v\) 有的 阅读全文