首页 > 其他分享 >最小生成树&最短路杂题

最小生成树&最短路杂题

时间:2024-10-15 15:02:00浏览次数:1  
标签:松弛 环上 可以 最小 即可 杂题 短路 dp

contest link

A

与 cheap robot 是一个题,就是跑多元最短路之后 \(dis_u+dis_v+w(u,v)\) 赋权跑Kruskal重构树即可

B

注意到是网格图,那么 \(u,v\) 不连通也就是以其为源点/汇点存在一个割。转对偶图之后也就是判环,那么在删除 \((u,v)\) 之前对偶图里其对应点已经连通就 NIE,否则 TAK

C

注意到环上节点个数 \(\le 20\),这启发我们可以枚举。

首先考虑树的情况,当定根时,设 \(g_u\) 为子树 \(u\) 期望行走长度。

  • \(u\) 是叶子,\(g_u=0\)
  • \(u\) 不是叶子,\(g_u=\frac{\sum_{v\in Son(u)}g_v+w(u,v)}{|Son(u)|}\)

这个容易 \(O(n)\) dp 并且换根求出每个点为根的答案。

然后再考虑环的情况。

注意到我们必然是走到环上一个点之后再随机游走到另一个点然后离开。

设 \(p_{u,v,0/1}\) 为环上第 \(u\) 个节点游走到第 \(v\) 个节点,顺逆时针且下一步走入子树或者不能走的概率,这个通过正反两个方向计算即可。

先考虑求出环上点的 \(g_u\),那么环上点的答案 \(f\) 是容易求的,也就是 \(f_u=\sum g_v·(p_{u,v,0}+p_{u,v,1})+d_{u,v,0}·p_{u,v,0}+d_{u,v,1}·p_{u,v,1}\)

然后考虑环内各个子树就直接换根下去就好了。

啊,还有长度

没有关系的

写出 \(O(n+k^2)\) 之后足以通过本题,但是事实上这个 \(k^2\) 可以优化到 \(O(k)\)。

D

还是比较特殊的dp。

\(dp_u=\min_{(u,v)}\lbrace \max(dp_v-p(u,v),r(u,v))\rbrace\)

考虑按照 \(r(u,v)\) 从大到小处理,如果边 \(r(u,v)\) 还没有被松弛且边权大于它的都已经被松弛,则说明 \(dp_{v}-p(u,v)\) 不可能大于 \(r(u,v)\),直接更新即可。

详细的说,我们使用一个队列进行拓扑排序,每次在拓扑排序完一轮后将当前未松弛的最大的 \(r(u,v)\) 取出进行松弛并标记为已操作,不再后续进行松弛。

E

每个人只会最多踢带一次

显然最短路可以拆点

那么考虑一个球的状态

  1. 被往东南西北踢

  2. 被带球

  3. 被接球

不妨设状态分别是 0/1/2/3/4/5

则 0/1/2/3 的转移方向是固定的,代价是p。

然后 0/1/2/3 也可以转移到5,代价是距离这个位置最小的球员跑过来带球的代价,这个可以通过一个 \(O(hw)\) 的多源BFS求出。

然后 4 的决策可以是往四个方向跑,亦或者用B的代价转到 0/1/2/3 变成踢球,也或者把球接住。而 5 也可以选择松开球也可以选择运球。

所以发现 \(4,5\) 会有一条 \(0\) 的边,所以 \(4,5\) 是等价的,只需要建立 \(5n\) 个点。

建图跑 dijkstra 即可。

F

蠢蛋题目。

按照题意要求根据可达性建立有向图(需要一个虚点辅助),然后缩点,问题变成找出一条路径使得路径上点权和最大。拓扑排序即可。

G

唐氏题目。

有一个简单的 dp:设当前可用边集合不变时,\(f_{i,j,k}\) 表示经过了 \(2^k\) 步从 \(i\) 能否走到 \(j\),显然有 \(f_{i,j,k}|=f_{i,t,k-1}\&f_{t,j,k-1}\)。

一个细节是我们走到 \(n\) 就算胜利,但是可能出现多走一步走不到 \(n\) 的情况,这是简单的,我们直接给 \(n\) 加一个自环即可。

而注意到可用边集合最多变化 \(m\) 次,所以可以预处理每个状态的 \(f\),通过倍增等手段拼出大答案,在 \(O(n^3m\log V)\) 的复杂度下解决这个问题。

这是超时的,但是注意到 \(f_{i,t,k-1}\&f_{t,j,k-1}\) 如果令 \(g_{i,j,k}=f_{j,i,k}\),则可以改写为 \(f_{i,t,k-1}\& g_{j,t,k-1}\),可以使用 bitset 进行优化。

复杂度 \(O(\frac{n^3m\log V}{w})\) 算下来 2.38e8 可以通过。

用 bitset 优化 |& 矩阵快速幂

标签:松弛,环上,可以,最小,即可,杂题,短路,dp
From: https://www.cnblogs.com/spdarkle/p/18467504

相关文章

  • 代码随想录训练营第62天|最小生成树
    53.寻宝#include<iostream>#include<vector>#include<climits>usingnamespacestd;intmain(){intv,e;intx,y,k;cin>>v>>e;//填一个默认最大值,题目描述val最大为10000vector<vector<int>>grid(v+1......
  • 图论 MST(最小生成树) prim
    #include<bits/stdc++.h>usingnamespacestd;constintP=1e6+7;constintinf=1e9;typedeflonglongll;intmp[1010][1010];intn,m;intd[1010];//从已选点到i的min权值intvis[1010];//选或没选voidprim(){ for(inti=1;i<=n;i++) d[i]=inf......
  • 平面图最短路与对偶图网络流
    一个相当厉害的东西啊。参考原件:IOI2008国家集训队论文——周冬。图片引自OI-wiki平面图llmmkk’sblog论文原件先给出结论:平面图最小割等于其对偶图最短路平面图平面图,指可以通过画图方式将使得边两两不相交的图。(无向图)例如:事实上是:一些概念:设\(G\)......
  • 最短路
    dijkstra更好的理解主要思想:每次确定一个点的最短距离我们将图分为2块,一块为最短距离确定的点集,一块为没有确定最短距离的点集,通过前者向后者拓展,来求得答案我们将所有已经有dis数值的点加入堆,然后每次dis数值最小的它的dis值就是最终的dis距离,所以可以将其加入到距离确定点集......
  • 最小生成树
    定义:在无向连通图中边权和最小的生成树为最小生成树。生成树的定义是在一个无向图中包含所有节点且边数最少的连通子图。Kruskal算法考虑一种贪心,我们将边权从小到大排列,依次将边加入生成树中,如果此次加边形成了环,则扔掉这条边。我们可以轻易证明此贪心的正确性,若在某次加入中......
  • 齐次方程组(超定方程组)的最小二乘解,及利用其拟合空间平面
    理论齐次方程组形如:。在一些优化,拟合等问题中经常出现,我们常考虑方程多于未知数元数的情况------超定方程组。首先对于平凡解x=0我们一般不感兴趣,一般我们会寻求方程组的非零解。如果x是方程组的一个解,那么对于,也是齐次方程组的解,一个合理的假设是只求满足的解。假设A的维数是......
  • 10 月杂题
    1.CF1976FRemoveBridges树的根度数为\(1\),先开始树上每条边都是割边,连接根和叶子可以去掉更多的割边,先连接一个叶子和根,然后另外的叶子两两组合,每次肯定删去更多的点,删去一部分点后有些删去的就会减少,想到长链剖分,第一次选最大的,后面每次选两个最大的即可。2.ABC374GOnlyOn......
  • 18732 最短路问题
    ###思路1.**建模问题**:将车站和公交线路建模为图,其中车站是节点,公交线路是带权边。2.**选择算法**:使用Dijkstra算法求解从车站1到车站n的最短路径问题。3.**初始化**:创建一个优先队列(最小堆)来存储当前节点和到达该节点的最小花费。初始化所有节点的最小花费为无穷大,起......
  • NOI提高级 图论算法:单源次短路
    DIJ(单源次短路)-TwoPaths-HDU6181DIJ(单源次短路)-TwoPaths-HDU6181-CSDN博客单源次短路(P2829大逃离)单源次短路(P2829大逃离)-CSDN博客单源次短路算法学习笔记单源次短路算法学习笔记-Wiueh_Plus-博客园次短路及次短路计数次短路及次短路......
  • 提高组杂题训练1
    A[USACO22DEC]BreakdownP首先\(N\le300\)\(k\le8\)看样子复杂度是个3次的东西。一些套路的东西比如删边改加边不说了。这个\(K\le8\)很有讲究。首先,不妨折半一下,算出从1经过一半条边到\(u\)的最短路径和\(u\)到\(n\)的最短路径,那么答案就可以\(\mathcal{O}(n......