上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 27 下一页
摘要: 传送门 解题思路 首先可以dp做,把数据离散化后dp[i]表示到i位置的最多区间数。 把所有区间按照右端点排序从左往右排序,求dp[i]就用右端点为i的区间更新答案。 状态转移可以看代码。 这种做法常数较大,我们还可以用贪心解此题。 我们依旧按照右端点排序,从左往右枚举所有区间,如果当前区间与前面没 阅读全文
posted @ 2020-10-14 23:38 尹昱钦 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 我们先考虑k==1的情况,这时候一定选取的是树的直径的两个端点。 因为不加这条新路每个边一定走两次,加上了之后道路两个端点之间的路径只需走一遍,所以贪心思想,一定是选取最长的路径的两个端点,即树的直径。 再考虑k==2的情况,一种情况是新加的道路的两个端点之间的路径与加的第一条边两 阅读全文
posted @ 2020-10-14 23:30 尹昱钦 阅读(109) 评论(0) 推荐(1) 编辑
摘要: 传送门 解题思路 先看一下数据范围,a、b、c都是10^6,所以大体推断出做法时间复杂度约为nlogn。 根据axy=(ax)^y,所以ab!=(((((a^1)^2)^3)^4)^……)^b。 用底数变化的快速幂(O(logb))做b次即可。 或者对指数b!做一些处理—— 我们知道指数b!一定不能 阅读全文
posted @ 2020-10-01 15:36 尹昱钦 阅读(384) 评论(1) 推荐(1) 编辑
摘要: 传送门 解题思路 题目很长,实际上就是给你一棵树,然后给你三个点,让你找到一个点,是这个点到三个点的距离和最短。 很显然的是,这个点在这三个点简单路径的上,而这三条简单路径一定有且只有一个交汇点,这个交汇点就是答案。 这就是为什么一定有一个交点,而且这个交点是其中两个点的LCA,且这个LCA是深度最 阅读全文
posted @ 2020-09-21 23:54 尹昱钦 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 传送门 传送门(加强版) 解题思路 这道题是我在学校里讲课的题,放上课件下载地址:https://files.cnblogs.com/files/yinyuqin/树网的核.ppt。 感觉课件里讲的还是比较详细的。 先说一下n^3做法:Floyd预处理出树中任意两点之间的距离,然后在直径上暴力枚举核 阅读全文
posted @ 2020-09-21 23:21 尹昱钦 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 很显然,就是在一棵树上,求两条路径有没有交点。 我们可以先分别求出两条路径两段点的LCA,设为rtab和rtcd然后分以下情况讨论: 当rtab==rtcd时,一定有交点(就是这个LCA)。 当rtab的深度大于c和d的深度或者rtcd的深度大于a和b的深度时,一定没有交点。(因为 阅读全文
posted @ 2020-09-20 00:14 尹昱钦 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先考虑一个点。肯定是在树的直径的中间rt。 树的直径就是树上距离最远的两个点的路径。 对于树的直径求法,常用的有两种。 两遍bfs或dfs,从任意一个点开始,找到距离这个点最远的点i,再从i开始,找到距离i这个点距离最远的点j,则i、j就是树的直径的两个端点(证明略)。 树形dp也 阅读全文
posted @ 2020-09-13 21:46 尹昱钦 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 为什么要找树的重心呢?假设我们已经找到了树的重心,如果把开会地点从重心向右移走,那么对答案的贡献就是+左边的元素和-右边的元素和。而因为是树的重心,所以向右移走后左面的元素数量一定大于右面的元素数量,所以ans是比在重心的情况大的,所以最终我们选择重心。 AC代码 #include 阅读全文
posted @ 2020-09-12 23:05 尹昱钦 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 求LCA一般可以用倍增、树链剖分、tarjan算法解决。 这里只介绍树剖。 先处理出每一条链的链顶,然后对于每两个要求的点,判断是否在同一条链上。如果在,那么深度较浅的点就是LCA。 如果不在同一条链上,就比较两个所在链的链顶的深度,把链顶深度较低的点跳到链顶的父亲(这样就保证有答 阅读全文
posted @ 2020-09-05 21:31 尹昱钦 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 关于两点之间的最短距离的区间操作,很显然是树链剖分。 因为既有区间和还有区间最大值,所以我们建立两个线段树。 然后就是树剖的常规操作了。 AC代码 1 #include<iostream> 2 #include<algorithm> 3 #include<cmath> 4 #inc 阅读全文
posted @ 2020-07-12 00:28 尹昱钦 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 传送门 树链剖分 简单点说,就是把一棵树变成多条链。 这里说的是重链剖分。 在遍历一颗树的时候,我们强制从父亲节点走向儿子时,先走所有儿子中以儿子为根的子树最大的那个儿子。 其他的儿子不管什么顺序都可。 这样就可以把dfs序作为链。 例如上面这棵树,边上的蓝色数字就是遍历顺序。 说一些定义: 重边: 阅读全文
posted @ 2020-07-05 16:16 尹昱钦 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 一、网课 网课一直在认真学(hua)习(shui)。导致编程一直没学 二、自招考试 准备了好长时间,作业………咳咳,让我头秃。导致编程一直没学 三、考试结束 玩了好长时间;导致编程一直没学 咳咳 但是现在, 一切都结束了。 又是一个新的起点。 重新回到OI,加油! 满血复活QAQ! 阅读全文
posted @ 2020-07-05 15:52 尹昱钦 阅读(123) 评论(1) 推荐(0) 编辑
摘要: 传送门 解题思路 唔,我才不要上网课呢 很显然对于每个节点i,必须保证叶子节点到这个点的传送距离相等,才能保证最终答案都是相等,而最少的增加次数一定就是使距离全部变成其中最大的距离。 好吧,解释的不清楚。 如果没听懂,重新用贪心来解释一下。 先想一下最终距离。设最终距离为d。 最终的距离一定就等于叶 阅读全文
posted @ 2020-03-08 10:42 尹昱钦 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 传送门 解题思路 先明确一下题意,c指的是路灯的编号而不是位置。 然后根据贪心,在从点i去关点j的路灯时,所有经过的路灯都会随手关掉(不耗时间),所以我们可以确定,若i点和j点的路灯已经关闭,那么区间i...j的路灯已经全部关闭,而且关完后,最优策略一定是在点i处或者点j处。 这和上一题就很像了,用 阅读全文
posted @ 2020-02-28 00:13 尹昱钦 阅读(200) 评论(1) 推荐(0) 编辑
摘要: 传送门 解题思路 观察队形的组成方式可以得出,最后一名加入区间i...j的人要么是在i位置上,要么是在j位置上,所以我们可以用dp[i][j][0]表示区间i...j最后一个加入的人站在i位置上的方案总数,同理,用dp[i][j][1]表示区间i...j最后一个加入的人站在j位置上的方案总数。 然后 阅读全文
posted @ 2020-02-27 23:13 尹昱钦 阅读(128) 评论(0) 推荐(1) 编辑
上一页 1 ··· 16 17 18 19 20 21 22 23 24 ··· 27 下一页