摘要:
题目大意 给了你 n(1<=n<=2*10^5) 个人的插队信息,让你输出最终的队列的排列 做法分析 正向思考的话,这道题就是最简单的模拟了,明显不能这样做 那就逆向思考吧 现在我们知道总共有 n 个人,且最后一个人要排在这 n 个人中的位置是 p[n],我们可以直接把队列的第 p[n] 个位子安排 阅读全文
摘要:
题目大意 给你一个含有 n(1<=n<=5000) 个节点的有向图,判断图中哪些点事 sink sink 的定义:如果 u 是 sink,所有 u 能够到的点 v,v 也能到 u 做法分析 先缩点,形成的 DAG 中,那些出度为 0 的点就是答案 证明如下(反证法): 令 u 是 DAG 中的一个 阅读全文
摘要:
题目大意 有 n(2<=n<=100) 所学校,每个学校都有个 list,列出了这个学校提供软件的学校名单。 现在问: A、为了使所有的学校享用到一个软件,最少有多少学校要 copy 一个软件 B、为了使传到任意学校的软件能够传到其他所有的学校,至少要添加多少个学校到相应学校的 list 中去 做法 阅读全文
摘要:
题目大意 n(1<=n<=10000) 头牛,有 m(1<=m<=50000) 个推举关系。推举关系具有传递性,即 A 推举 B, B 推举 C,那么 A 也推举 C 问你,能够得到所有牛推举的牛有多少头? 做法分析 求强连通分量缩点后反向建图 然后判断图中是否有且仅有一个点的入度为 0,是的话就输 阅读全文
摘要:
题目大意 一个国王,有 n(1<=n<=2000) 个儿子,在这个国家中有 n 个漂亮的妹子。每个儿子都有自己喜欢的妹子(可以是多个)。每个妹子只能嫁一个人,每个儿子只娶自己喜欢的人 国王的巫师调查到了每个儿子喜欢哪些妹子,并且为每一个儿子分配了他喜欢的妹子让他娶 但是国王不满意,说是要巫师统计出每 阅读全文
摘要:
题目大意 给你一个 n(0<n<1001) 个节点 m(m<6000) 条边的有向图,对于图中的任意两个节点 u 和 v,问能否从 u 走到 v 或者从 v 走到 u PS:这其实是《算法导论》中讲“强连通分量”的最后一道习题 做法分析 由于强连通分量重的点肯定能够满足题目的要求,所以可以先将图“化 阅读全文
摘要:
题目大意 给你一个 n(n<=10000) 个节点的图,让你判断这个图是否是一个强连通图 做法分析 直接用 tarjan 算法求强连通分量即可 参考代码 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include 阅读全文