首页 > 其他分享 >CF1863E Speedrun 题解

CF1863E Speedrun 题解

时间:2024-08-10 19:17:46浏览次数:17  
标签:题解 边权 CF1863E 35 我们 任务 完成 Speedrun 最长

CF1863E

你在玩一个游戏,要完成 \(n\) 个任务。其中对于每个任务 \(i\),它只能在某一天的第 \(h_i\) 时刻完成。游戏每天有 \(k\) 个小时,分别编号为 \(0,1,...k-1\)。

给出 \(m\) 对任务间的依赖关系,\((a_i,b_i)\) 表示 \(a_i\) 必须比 \(b_i\) 先完成。保证依赖关系不形成环。

完成任务不需要时间,也就是说可以在同一天的同一时刻先后完成多个任务。

求完成所有任务所需的最短时间。这里的时间定义为:完成最后一个任务的时刻 与 开始第一个任务的时刻 之差。

多组数据,\(T\le 10^5\),\(\sum n,m\le 2\times 10^5\),\(k\le 10^9\)。

  • 如果你认为直接跑一边 \(dp\) 就可以轻松解决的话,请注意最终题目要求的值

  • 如果还不理解,可以手玩第 \(4\) 个样例

  • in:
    5 0 1000
    8 800 555 35 35
    ans:
    480
    
  • 因为我们可以第 \(1\) 天完成 555,第 \(2\) 天完成 8 35 35 800。最终答案为 \(1035-555=480\)


  • 因为我们容易发现,对于每一条边,他时间的差值是固定的,我们把这个作为边权

  • 例如从 \(h_1=3 \to h_2=5\),那我们可以令边 \((1,2)\) 的边权为 \(2\);相反的,如果 \(h_1 = 5, h_2 = 3\),边权应为 \(k-2\),这样我们可以得到一个有边权的 \(DAG\)

  • 如果我们枚举开始的时间是 \(x\),那对于每一个 \(x\) 我们可以在原图跑一个 \(O(n)\) 的最长路,这显然是正确的

  • 我们时间无法优化的原因是枚举的 \(x\) 是跑最长路的基础,我们改变 \(x\) 就一定会改变最长路过程中的值,但这是可以避免的,我们只需要对返图跑最长路即可,这样我们就可以得到从出度为 \(0\) 的点到入度为 \(0\) 的点的最长路,我们可以记作 \(d_i\)

  • 因为我们是对反图跑最长路,因此我们最长路得到的值 \(d_i\) 是与 \(x\) 无关的,我们考虑怎么把 \(x\) 的贡献加上去

  • 对于枚举的一个 \(x\),我们把所有入度为 \(0\) 的点分为两类处理

    1. \(h_i < x\),这一类要放到第二天开始处理,因此答案为 \(k - (x - h_i) + d_i\)

    2. \(h_i \geq x\),这一类第一天就开始处理,答案为 \(h_i - x + d_i\)

  • 我们对这两种情况取 \(\max\) 得到的值即为当前 \(x\) 下的答案,我们对于所有 \(x\) 求 \(\min\) 即可

  • 虽然直接暴力的做还是 \(O(n^2)\) 的,但仔细想想就发现这很好优化,我们把第一、二种情况的 \(-x\) 提出来,做一个前缀后缀的 \(\max\),就可以 \(O(n)\) 的快速合并答案

  • 最终复杂度 \(O(n)\)

标签:题解,边权,CF1863E,35,我们,任务,完成,Speedrun,最长
From: https://www.cnblogs.com/fox-konata/p/18352688

相关文章

  • 洛谷 P10852 Awaken——题解
    洛谷P10852题解传送锚点摸鱼环节【MX-X2-T1】「CfzRound4」Awaken题目背景能否等到梦醒了的时候。题目描述月做了一个梦。在梦中,她拿到了一个长度为\(n\)的整数序列\(a_1,\ldots,a_n\),其中\(\bm{n\ge5}\)。梦醒了。月忘记了这个序列中的一部分元素,留下了空白......
  • P4933 大师 题解
    题目传送门思路动态规划看到题目就想到了最长上升子序列。类比最长上升子序列,发现多了一个要求,可以多开一维。设\(f_{i,j}\)表示以\(i\)为结尾,\(j\)为公差的序列的长度(点的个数$-1$),那么答案就为\[\sum_{i=1}^{n}\sum_{j=-\max(v)}^{\max(v)}f_{i,j}\]看上去......
  • ABC201E Xor Distances 题解
    ABC201EXorDistances题解题目大意给定一个带权树,求树上每两点的简单路径上的边权的异或和的和。形式化的,定义\(dis(i,j)\)为\(i\)到\(j\)的简单路径上的边权的异或和,求\(\large\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n\text{dis}(i,j)\)。Solve令\(\largef(u)=......
  • 洛谷 P1127 词链——题解
    洛谷P1127题解传送锚点摸鱼环节词链题目描述如果单词\(X\)的末字母与单词\(Y\)的首字母相同,则\(X\)与\(Y\)可以相连成\(X.Y\)。(注意:\(X\)、\(Y\)之间是英文的句号.)。例如,单词dog与单词gopher,则dog与gopher可以相连成dog.gopher。另外还有一些例子:dog......
  • CF1155C 题解
    题目传送门题目大意:给定一个长度为\(n\)的单增序列\(a\)和一个长度为\(m\)的序列\(b\),询问是否存在一个正整数\(y\)使得\(a_1\equiva_2\equiv\cdots\equiva_n\equivy\space(\bmod\spacep)\),且\(p\)在序列\(b\)中出现过。思路:将条件转化一下,得:是否存在一个......
  • 08-08 题解
    08-08题解地址A-CF1420Eluogu翻译更正ifhegivesnomorethatkorders对于至多k次操作,题面没有翻译出来思路怎么算贡献?贡献(被保护)出现在「处在任意两个不同的0的连续段的守卫」之间,而处于同一连续段的守卫之间没有贡献设一共\(cnt\)个\(0\),每个连续......
  • 提高组:玩具谜题 题解
    题目描述小南有一套可爱的玩具小人,它们各有不同的职业。有一天,这些玩具小人把小南的眼镜藏了起来。小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的面朝圈外。如下图:这时singer告诉小南一个谜题:“眼镜藏在我左数第 33 个玩具小人的右数第 11 个玩具小人的左数第......
  • 08-09 题解
    08-09题解A小水题思路假设我们选定了当前子序列的绝对众数\(x\),那么该序列里最多再放\(num_x-1\)个其他数字为了分出最少的子序列,肯定要让每个子序列在拥有绝对众数的同时能消化尽量多的其他数字由此,可以得到一个贪心策略:每次取出出现次数最多的一个数字,消掉出现......
  • P1725 琪露诺 题解
    思路动态规划,单调队列动态规划观察题目,发现下标为\(i\)的点只能对\([i+l,i+r]\)区间的点产生贡献。设\(f_i\)为到达点\(i\)时的最大冻结指数。易得状态转移方程式:\(f_k\leftarrow\max(f_k,f_i+a_k),(k\in[i+l,i+r])\)。若直接对该方程进行转移,时间复......
  • AT_abc208_d 题解
    题目传送门做完这道题后感觉对Floyd的理解更深了。根据题面要求,设\(f(k,i,j)\)表示从\(i\)到\(j\)的所有只经过\(1\simk\)的点的所有路径的最短距离。很明显\(k\)那一维是阶段,因为它描述了从\(i\)到\(j\)路径中的不同点,而我们就是根据这一条件来划分集合,这......