图论
图上算法
TMJYH09
这个作者很懒,什么都没留下…
展开
-
P3831 [SHOI2012]回家的路 题解
题目传送门分析解法 1:每两个点都连边,跑裸的最短路。显然,nnn 和 mmm 非常大,暴力连边会 TLE 和 MLE。解法 2(正解):首先,对答案产生贡献的只有换乘站,所以我们只用连两种边:一个换乘站看作 222 个节点,连边,边权为 111(站内换乘)。将 xxx 相等的换乘站相连,yyy 相等的换乘站相连。其中,起点和终点也要加入图中。建完图后,因为起点有两个,一个是 000,一个是 m+1m+1m+1,以这两个为源点跑最短路,再取个最小值即可。代码#include原创 2022-01-26 00:19:30 · 331 阅读 · 0 评论 -
SP18966 VACATION - Vacation Planning 题解
题目传送门题意简述给定一张有向带权图,有 QQQ 个请求,每个请求给出点 aia_iai,bib_ibi,费用为 aia_iai 经过点 1→K1 \rightarrow K1→K 中的至少一个到达 bib_ibi 的最小权值和。求出可行的请求数和最小费用和。分析有多个询问,很明显是多源最短路,求多源最短路可以用 Floyd,也可以调用 nnn 次 Dijkstra。核心代码int dis[205][205];bool vis[205][205];void Dijkstra(int原创 2022-01-15 13:24:14 · 126 阅读 · 0 评论 -
P1137 旅行计划 题解
题目传送门题意简述给定一张有向图,起点任意,求出到每个点经过的最多点数和。分析先把图画出来:一开始做这题的时候以为是非常简单的最短(长)路,但是发现起点是任意的,没有源点,所以我们就不能用 SPFA 啦反正都死了(事实上,我们可以对这张图进行拓扑排序,将入度为 000 的节点 disdisdis 设为 111,这样就能保证每次更新的 disdisdis 都是最优的。代码实现#include <bits/stdc++.h>using namespace std;struct原创 2022-01-22 15:55:52 · 405 阅读 · 0 评论 -
P1396 营救 题解
题目传送门分析这题有好几种方法可以做,有跑最短路的,有些最小生成树的。这里介绍最短路的方法。单源最短路径,很自然地想到 Dijkstra。不过题目要求的是最大值最小,所以松弛就要改成:if(dis[v]>max(dis[u],e[i].w)) dis[v]=max(dis[u],e[i].w);代码实现#include <bits/stdc++.h>using namespace std;int n,m,s,t;struct edge{ int to,nxt,w;原创 2022-01-21 21:54:27 · 260 阅读 · 0 评论