摘要: 题目 分析: 如果一个点不是割点,那么将其剪去后,只会产生它自己到其他n-1个点的2*(n-1)个有序点对。 如果一个点是割点,将其剪去后,贡献来源于: 1.它子树中两两产生的点对 2.它所有子树与除了它子树之外的点产生的点对 3.它自己和n-1个点产生的点对 (这里的子树都指的是tarjan遍历出 阅读全文
posted @ 2019-10-05 21:27 rua-rua-rua 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 题目: 分析: (这道题是真的难)(声明: 在这位大佬的题解下多做了说明,图片来源也是他的博客。) 首先我们要发现一些小规律: 1.将A和B排序之后并不影响答案 证明:不管哪一列排序放到了哪里,那一列的最大值都应该是Ai。 2.A的最大一定等于B的最大: 很显然,如果不等于,那么最大值放在哪里都不合 阅读全文
posted @ 2019-10-05 19:53 rua-rua-rua 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 题目: 分析: 首先画样例分析一下,会发现如果要求一个位置要多少次翻转,就将这个位置向与它关联的点连边(关联点指的是可能与它值互换的位置),一直连到起点为止,连边的次数即为它所需步数。 所以转换成求单源最短路,因为边权为1,可以用bfs。 但是这道题n的范围很大,刚刚的做法是n*k的,考虑优化。 法 阅读全文
posted @ 2019-10-05 19:31 rua-rua-rua 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 题目: 分析: 考虑最暴力的暴搜,怎么才能优化呢? 如果我们确切地知道第k大的路径权值和有多大,那么在dfs里面加一个限制就可以求出所有前k大的路径了。 很显然答案是满足单调性的。 可以二分一个答案,dfs一遍,看满足这个答案的有多少条路径,如果超过k条,就往大的走。 最后把二分出来的答案跑一遍df 阅读全文
posted @ 2019-10-05 11:43 rua-rua-rua 阅读(177) 评论(0) 推荐(0) 编辑