首页 > 其他分享 >AT_nikkei2019_2_qual_d Shortest Path on a Line 题解

AT_nikkei2019_2_qual_d Shortest Path on a Line 题解

时间:2024-03-02 17:36:00浏览次数:16  
标签:le qual 题解 边权 nikkei2019 复杂度 sim

我们发现,brute-force 的复杂度的优化瓶颈主要在建图上。

于是我们有一个巧妙的转化:

因为所有满足 \(L \le S,T \le R\) 的所有边 \((S,T)\) 的长度均为 \(C\)。

然后题目要求的是 \(1 \sim N\) 的最短路。

那么在边权相等的情况下,走到的点的编号一定越大越好。

于是在所有点对 \((S,T)\) 中,最优的一定是 \((L,R)\)。

所以我们在建图时,仅需连接边(此处和以下所说的“边”均指单向边) \((L,R)\) 即可。

但是如果当前处在 \(L \sim R\) 之间的点,怎么办?

其实可以对于 \(2 \sim N\) 中的每个点 \(i\),都向编号为 \(i-1\) 的点连一条边权为 \(0\) 的边(边权为 \(0\) 是为了边权之和保持不变)。

当目前处在 \(L \sim R\) 之间的点时,就可以通过若干边权为 \(0\) 的边回到 \(L\),再跳到 \(R\)。

通过这样的转化,我们成功将建图的复杂度优化到了 \(O(N+M)\),接着跑一遍 dijkstra 算法求出最短路即可。

总时间复杂度为 \(O(N+M+N \log N)\)。

标签:le,qual,题解,边权,nikkei2019,复杂度,sim
From: https://www.cnblogs.com/XOF-0-0/p/18048937

相关文章

  • AT_abc243_e [ABC243E] Edge Deletion 题解
    首先,我们可以得出一个结论:令点\(i,j\)之间的最短路径边权和\(dis_{i,j}\),若存在一个点\(k\),使得\(k\neqi\)且\(k\neqj\)且\(dis_{i,k}+dis_{k,j}=dis_{i,j}\),则连接\(i,j\)的边可以被删去。该结论的正确性是显然的,因为将连接\(i,j\)的边删去后,\(i,j\)之间的......
  • AT_arc083_b [ABC074D] Restoring Road Network 题解
    难度虚高,建议评橙/黄qwq。首先我们发现这是一道最短路问题,且\(N\le300\),于是采取floyd算法解决。具体地,我们分情况分类讨论。令我们当前枚举到的最短路径起点为\(i\),终点为\(j\),中转点为\(k\),输入的矩阵为\(dis\)。若\(dis_{i,j}>dis_{i,k}+dis_{k,j}\),则一定无......
  • P9184 [USACO23OPEN] Moo Language B 题解
    恶♂趣♂味♂大♂模♂拟♂。首先是构造语句部分:开始肯定是尽可能地多用上不及物语句和及物语句;接着,因为及物语句的单词数量一定比不及物语句多,所以贪心地尽可能多地将不及物语句改为及物语句;然后,为了增加语句长度,再次贪心地在及物语句中尽可能多地添加名词和逗号即可。......
  • CF1856E1 PermuTree (easy version) 题解
    假定当前在节点\(u\),它拥有两棵子树\(v,w\),此时\(u\)是\(\operatorname{lca}(v,w)\)。我们一定可以构造出一个排列\(a\),使得所有满足\(i\inv\)的节点\(i\)和满足\(j\inw\)的节点\(j\),有\(a_i<a_u<a_j\)。因此此时点\(u\)对于答案的贡献即为\(size_v\times......
  • P9183 [USACO23OPEN] FEB B 题解
    由于只需要考虑相邻的位置,所以每一段连续的F是互不影响的,可以分别进行考虑。而连续的一段F又可以分成两类:靠边的和被夹在中间的。靠边的F段较为简单,假定有\(c\)个F,不难发现只要让EB交错出现就可以达到最少次数,而让所有的F都变成最近的非F就可以达到最多次数\(c......
  • P3671 [USACO17OPEN] Where's Bessie? S 题解
    我们先枚举所有子矩阵,验证其在不考虑重叠的情况下是否为PCL矩阵(dfs求一遍联通块即可)。然后将所有满足条件的矩阵存下来,最后朴素判断每个矩阵是否被其他矩阵包括,若没有矩阵包括它,则其对于答案的贡献为\(1\),累加所有贡献即为最终结果。时间复杂度是\(O(n^6)\)的。思路很简......
  • P1874 快速求和 题解
    updon2023/12/22:修改了代码,现已通过所有hack数据。首先定义状态:令\(dp_{i,j}\)表示前\(i\)个数字要变成\(j\)所需要的最少加号个数。同时,我们还需要一个辅助数组:令\(num_{i,j}\)表示\(i\simj\)的数字组成的数(不添加加号)。然后进行转移。显然可以枚举......
  • AT_dp_z Frog 3 题解
    这题的朴素dp是显然的。令\(dp_i\)表示跳到第\(i\)个石头的最小花费,有转移方程:\[dp_i=\min_{j=1}^{i-1}\{dp_j+(h_i-h_j)^2+C\}\]直接转移是\(O(n^2)\)的,考虑优化。首先对于\(\min\)以内的式子化简,得:\[dp_j+h_i^2+h_j^2-2h_ih_j+C\]将与\(j\)无关的项剔除,得:\[d......
  • 喵了个喵 题解
    传送门这玩意是T2???观察到\(k=2n-2\)或\(k=2n-1\),所以我们可以尝试让每个栈里面都保持两张牌。同时保留一个空栈,用来消栈底。记这个保留的空栈为\(sp\)。策略1:如果当前牌堆顶的牌能消,必然消;否则除了\(sp\),如果存在一个没有填到两张牌的栈,放进去。当\(k=2n-1\)......
  • CF1915D Unnatural Language Processing 题解
    容易发现音节的划分不仅要求子串形如\(\texttt{CV}\)或\(\texttt{CVC}\),并且接下来的两个字符也必须是\(\texttt{CV}\),不然会导致无法划分下去。于是我们遍历字符串,找出所有满足上述条件的子串,记录需要输出\(\texttt{.}\)的位置即可。实现:intn;strings,ans,t="";cin>......