摘要:
题目大意给了 n(2<=n<=105) 个点,从每个点 u 出发连向了一个点 v(共 n 条边)现在要求添加最少的边使得整个图是一个强连通图做法分析这道题千万不要一般化:先求强连通分量再把图化为 DAG 来做(我们能够很方便的得到需要添加的边的数量,但是加哪些边会变得很麻烦)注意一个细节:每个点的出度必为 1有什么特点? 从一个点 u 出发 DFS 遍历所有能够遍历到的点,DFS 结束的时候必定得到一个环!而且,因为每个点的出度为 1,所有遍历到的点只能形成一个环!而且这个环还是在路径的结尾,如果把这个换缩成一个点,那么我们等够得到的是一个“倒着长”的树(只存在从叶子节点到树根的节 阅读全文
摘要:
题目大意 给你 n(1<=n<=10^5) 个数,m(1<=m<=10^5) 个询问,每个询问的格式如下 L R H:从第 L 个数到第 R 个数中,小于等于 H 的数有多少个 做法分析 建立划分树 每次 query 的时候,二分答案即可,即二分这个区间中有多少个小于等于 H 的数 参考代码 1 # 阅读全文
摘要:
题目大意 给你一个含有 n(1<=n<=5000) 个节点的有向图,判断图中哪些点事 sink sink 的定义:如果 u 是 sink,所有 u 能够到的点 v,v 也能到 u 做法分析 先缩点,形成的 DAG 中,那些出度为 0 的点就是答案 证明如下(反证法): 令 u 是 DAG 中的一个 阅读全文
摘要:
题目大意 给你一个 n(0<n<1001) 个节点 m(m<6000) 条边的有向图,对于图中的任意两个节点 u 和 v,问能否从 u 走到 v 或者从 v 走到 u PS:这其实是《算法导论》中讲“强连通分量”的最后一道习题 做法分析 由于强连通分量重的点肯定能够满足题目的要求,所以可以先将图“化 阅读全文
摘要:
题目大意 有 n(2<=n<=5000) 个人,m(0<m<=30000) 个 support 关系(A support B)。问:哪些人得到的 support 最多。 需要注意的是 support 是可以传递的,比如:A support B && B support C,那么,C 得到的 supp 阅读全文