
图论
图论
JA_yichao
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
POJ 1127 Jack Straws【计算几何】【Floyd传递闭包】
计算几何+Floyd传递闭包原创 2022-01-18 20:26:00 · 188 阅读 · 0 评论 -
nowcoder2021-S 第一场 A.牛表【spfa】
题目思路这道题我压根没有想过可以用最短路。观察题目可以发现,题目给的操作其实是一个图上问题,牛币作为点权,操作前的x和操作后的x相当于中间连了一条边的两个点。然后根据打表可得 花费的牛币数量最多为17,so~暴力建图即可。然后求多源最短路,按照题目计算答案即可。代码#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>原创 2021-10-05 22:06:48 · 178 阅读 · 0 评论 -
SSL集训 2021.08.24 提高B组 T4 Party【spfa】
SSL集训原创 2021-08-24 20:56:46 · 138 阅读 · 0 评论 -
SSL集训 2021.08.20 提高B组 T4 Tree【最小标准差生成树】
SSL集训原创 2021-08-20 19:58:54 · 134 阅读 · 0 评论 -
SSL集训 2021.08.17 提高B组 Luogu P7296 [USACO21JAN] Uddered but not Herd G【分层图+spfa】
SSL集训原创 2021-08-17 16:47:31 · 296 阅读 · 0 评论 -
YbtOJ 最短路径课堂过关 例4 汽车加油【dijkstra】
思路这道题我们可以把不同的情况分类讨论一下:如果当前点有油而且油没满,那么就判断一下加油的情况如果当前点没油而且油没满,那么就判断一下建油加油的情况如果当前还可以走,那么就尝试往4个方向拓展的情况。代码#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue>using namespace std;long long ..原创 2021-05-04 19:58:58 · 238 阅读 · 0 评论 -
YbtOJ 最短路径课堂过关 例3 最优贸易【SPFA】
思路这道题我以前做过,所以就不再解释了。最优贸易代码#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namespace std;long long tot,hd[1000010],tot1,hd1[1000010];long long dismin[1000010],dismax[1000010],v[1000010];long long ..原创 2021-05-04 16:18:16 · 144 阅读 · 0 评论 -
YbtOJ 最短路径课堂过关 例2 判断负环【SPFA】
思路这道题可以用SPFA来做,因为跑最短路的时候如果遇到负环就会一直在环里跑出不来,所以我们就直接在跑SPFA的时候判断一个点有没有被经过多次就好了。代码#include<iostream>#include<cstring>#include<cstdio>#include<queue>using namespace std;long long dis[100010],v[100010],lj[100010];long long hd[10..原创 2021-05-04 14:50:51 · 153 阅读 · 0 评论 -
YbtOJ 最短路径课堂过关 例1 单源最短路径【dijkstra】【堆优化】
思路这道题是最短路径模板题,不过需要dij加上小根堆优化才能过。用邻接表实现。代码#include<algorithm>#include<iostream>#include<cstdio>#include<queue>#define lzh pair<int,int>using namespace std;int dis[300010],v[300010];priority_queue<lzh> q;int ..原创 2021-04-17 07:53:49 · 263 阅读 · 0 评论 -
YbtOJ 最小生成树课堂过关 例4 构造完全图【kruskal】
思路这道题我们可以从kruskal的本质着手。我们kruskal的过程是不断合并连通块,当然每个连通块都是已经合并好的最优连通块。这个时候我们可以把输入的最优连边当做最小生成树的边,然后把其他边全部连成最优边边权加一,这样就可以保证连出来的完全图满足唯一最小生成树且边权和最小。代码#include<algorithm>#include<iostream>#include<cstdio>using namespace std;long long n,..原创 2021-04-16 20:12:21 · 218 阅读 · 0 评论 -
YbtOJ 最小生成树课堂过关 例3 新的开始【kruskal】
思路这道题我们可以每得到一个方案就跑一次最小生成树,然后得到答案。注意要保证各个城市之间都有公路直接或间接相连。当然做之前要排序要排序。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;int n,m,c,f[10010],k;double ans;struct node{ int a,b,w;..原创 2021-04-08 17:31:00 · 171 阅读 · 0 评论 -
YbtOJ 最小生成树课堂过关 例2 新的开始【prim】
思路这道题我们可以设一个超级点,然后把超级点连向每个普通点,边权就是每个普通点的权值。最后跑一个最小生成树就好了。代码第一种统计法:#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;int l[310][310],dis[1000],n,minn[1000],v[1000],ans;int main()..原创 2021-04-08 16:55:54 · 154 阅读 · 0 评论 -
YbtOJ 最小生成树课堂过关 例1 繁忙都市【并查集】【kruskal】
思路这道题是最小生成树模板题。我们用并查集优化查找连通块的过程,使其时间复杂度达到 O(nlog2n)O(n \log_2n)O(nlog2n)代码#include<algorithm>#include<iostream>#include<cstdio>#include<cmath>using namespace std;int n,m,f[100010],ans; struct node{ int u,v,c;}a[1000..原创 2021-04-07 17:29:38 · 120 阅读 · 0 评论 -
初探Tarjan算法(求强连通分量)
初探Tarjan算法(求强连通分量)转载 2020-10-28 21:55:17 · 242 阅读 · 0 评论 -
T145192 【2020.8.23NOIP模拟赛】最优路线【DP&Floyd】
这道题主要思想就是修改 FloydFloydFloyd 为一个奇怪的 DPDPDP ?然后各种玄学优化+卡常,这样就能 O(n3)O(n^3)O(n3) 切掉这道题。我们定义 ansansansi,j 作为转移变量,表示 iii 号点到 jjj 号点的min(最大路径长度×路径上的最大点权)\min(最大路径长度 \times 路径上的最大点权)min(最大路径长度×路径上的最大点权)可得动态转移方程:ans[i][j]=min(ans[i][j],max(dq2[i],max(dq2[.原创 2020-08-23 20:32:48 · 881 阅读 · 1 评论 -
luogu P1983 车站分级【拓扑排序】
思路我们让没有被停靠的站与被停靠的站连一条单向边,然后正常来一波拓扑排序。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int pa[100010],now[100010],ls[100010],dl[100010],d[100010],v[100010],ma.原创 2020-08-17 16:09:36 · 220 阅读 · 0 评论 -
Luogu P4017 最大食物链计数【拓扑排序】
思路我们要设两个数组分别记录它的入度和出度,在拓扑排序时判断它是否是最高级消费者(入度出度都为0),就把它的总链数加起来。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int rd[1000010],cd[1000010],ls[1000010],dl[10.原创 2020-08-17 11:40:12 · 171 阅读 · 0 评论 -
Luogu P1347 排序【拓扑排序】
思路:每输入一个关系就拓扑一次把结果分为三种情况1.根据前x个关系得到整体关系这里我们可以用拓扑把度清零,记录每个字母都出现过并且判断最长的链是多少就行了即 f[a[i].to]=max(f[a[i].to],f[p[h]]+1),s=max(s,f[a[i].to]);f[a[i].to]=\max(f[a[i].to],f[p[h]]+1),s=\max(s,f[a[i].to]);f[a[i].to]=max(f[a[i].to],f[p[h]]+1),s=max(s,f[a[i].原创 2020-08-17 10:24:02 · 225 阅读 · 0 评论 -
SSL2876 工程【拓扑排序】
主要算法拓扑排序+动态规划思路首先做一遍拓扑排序,每当有一个点入度为0时,我们就从它的父亲中选一个最大的时间作为完成这个工程之前所需的时间。最后统计一下就行。代码#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int a[100010],ls[100010.原创 2020-08-17 08:21:56 · 151 阅读 · 0 评论 -
2020.6.25普及C组 灌溉农田(irrigation)【纪中】【最小生成树】
这道题需要用到最小生成树我们首先将代价大于CCC的管道标记好。(没大于不用管,不参与最小生成树)再跑一次最小生成树。注意:跑到一个点就要累计管道代价。如果跑不完所有点就输出−1-1−1。#include<algorithm>#include<iostream>#include<cstring>#include<string>#include<cstdio>#include<cmath>using names原创 2020-06-26 16:48:34 · 322 阅读 · 0 评论 -
2020.3.28普及C组 羊羊修路(road)【纪中】【prim】
本题用最小生成树解出(primprimprim类似于dijkdijkdijk,都是蓝白点思想)#include<iostream>#include<cstdio>#include<cstring>using namespace std;int f[10010],a[3010][3010],dis[3010];int x,y,z,n,m,ans;v...原创 2020-03-28 16:19:38 · 441 阅读 · 0 评论 -
2020.3.18普及C组 过路费(toll)【纪中】【Floyd】【点权】
巧妙的FloydFloydFloyd我们先把点权排序,这样就能符合FloydFloydFloyd的性质,我们就可以直接一边跑FloydFloydFloyd一边比较点权求最大了。#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<...原创 2020-03-20 19:43:55 · 228 阅读 · 0 评论 -
2020.3.14普及C组 危险系数(danger)【纪中】【Floyd】
本题可用FloydFloydFloyd,不会超时跑完最短路后累加即可#include<iostream>#include<cstring>#include<cstdio>#include<cmath>using namespace std;int b[1000010],a[1010][1010];int n,m,ans;int ma...原创 2020-03-14 14:10:39 · 191 阅读 · 0 评论 -
2020.3.8普及C组 道路阻塞(rblock)【纪中】【SPFA】
这边的大佬说要用堆优化的djikdjikdjik那边的神仙说邻接表SPFA卡常我默默地敲了一个邻接矩阵的SPFASPFASPFA,还跑了m+1m+1m+1次,结果——#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<queue...原创 2020-03-10 19:44:04 · 348 阅读 · 0 评论 -
2020.2.7普及C组 复仇者vsX战警之训练(train)【纪中】【SPFA】
SPFA,好久没练,有点生疏了#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>using namespace std;long long dis[10010],v[10010],f[1000010],ph[10010];long long m,n...原创 2020-02-24 19:38:16 · 192 阅读 · 0 评论 -
luogu P1137 旅行计划 【拓扑排序】
原题链接传送门其实就是拓扑排序模板题将入度为零的点放1(因为可以观光这个城市)用 MaxMaxMax 来递推可以观光的城市t[y1]=max(t[x1]+1,t[y1]); ( t[y1]t[y1]t[y1] 是目前点最大可观光的城市)最后顺次输出每个城市以第 iii 个城市为终点最多能游览多少个城市。不多讲,直接上代码:#include<iostream>...原创 2020-01-17 21:47:39 · 277 阅读 · 0 评论 -
奖金【拓扑排序】
原题链接传送门拓扑排序:我们可以这样来理解:就是一些子工程需要建立在另一些子工程的基础上,然后从入度为零的点开始,把这个点一个一个放进一个序列里,建立一个线性的数的序列,这些数列有至少1种。(解释很粗糙,别介意);当且仅当一个有向图为有向无环图(directed acyclic graph,或称DAG)时,才能得到对应于该图的拓扑排序。按照(wo)这(de)种(tu)方法直接...原创 2020-01-17 20:35:37 · 461 阅读 · 0 评论 -
小萨的烦恼【Floyd】
原题链接传送门这道题我想尝试用 SPFASPFASPFA但做不出来,只能用 FloydFloydFloyd 了。所以,难度降低了,只需要建立一个邻接矩阵,跑一遍 FloydFloydFloyd ,最后求出最短距离即可,在这里解释一个东西:maxx=min(maxx,dis[1][i]+a[i][j]+dis[j][s]);这行代码的意思是,假设在这里坐车,用第一段+坐...原创 2020-01-17 12:07:44 · 214 阅读 · 0 评论 -
刻录光盘【图论】
原题链接传送门emmmm…两个 dfsdfsdfs第一个 dfsdfsdfs用来记录出栈的顺序第二个 dfs 加一个 for第二个~ dfs~加 一个~for第二个 dfs 加一个 for求有多少个强连通分量。☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟☟...原创 2020-01-17 10:34:00 · 327 阅读 · 0 评论 -
P1073 最优贸易【SPFA】
题目链接传送门@xuxiayang神仙%%%整个机房的 ACACAC 都因他而起。@liuzihan大佬%%%他造就了我的 ACACAC 。步入正题:这道题其实就是让你先跑一遍 SPFASPFASPFA用来求出最低的买入水晶球的价格再将图反置,从后往前再跑一遍 SPFASPFASPFA用来求出最高的卖出水晶球的价格最后从2到n求出一个最大的最高价值减去最小价值的值...原创 2020-01-16 22:02:05 · 238 阅读 · 0 评论 -
luogu P1346 电车 【SPFA】
题目链接传送门附有点懒,以后不附上题目了(逃)整体代码难度:★★SPFA思考难度:★☆储存方式思考难度:★★★读题差点没读懂第一行有3个整数2<=N<=100,1<=A,B<=N,分别表示路口的数量,和电车的起点,终点。可以用 FloydFloydFloyd ,但我还是想练一练 SPFASPFASPFA当然我还是没有用STLSTLSTL让我们步入...原创 2020-01-16 08:53:02 · 174 阅读 · 0 评论 -
最短路径问题【Bellman-Ford】
题目链接传送门DescriptionDescriptionDescription平面上有n个点(N<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点直线的距离。现在的任务是找出从一点到另一点之间的最短路径。InputInputInput输入文件short.in,共有n+m+3行,...原创 2020-01-15 22:08:33 · 240 阅读 · 0 评论 -
工厂的烦恼【SPFA】
DescriptionDescriptionDescription某工厂发现厂里的机器在生产产品时要消耗大量的原材料,也就是说,有大量的原材料变成了废物。因此厂里想找出消耗原材料最大的一条生产线路进行改造,以降低成本。厂里的生产线路是一个有向无环网络,有N台机器分别代表网络中的N个结点。弧< I,j >(i < j)表示原材料从机器i传输到机器j的损耗数量。InputInpu...原创 2020-01-15 21:07:43 · 205 阅读 · 0 评论 -
最优布线问题【prim】
原题链接传送门DescriptionDescriptionDescription学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们之间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接的通过若干台计...原创 2019-12-26 16:54:21 · 553 阅读 · 2 评论 -
最优布线问题【kruskal】
原题链接传送门和上一题一样DescriptionDescriptionDescription学校有n台计算机,为了方便数据传输,现要将它们用数据线连接起来。两台计算机被连接是指它们之间有数据线连接。由于计算机所处的位置不同,因此不同的两台计算机的连接费用往往是不同的。当然,如果将任意两台计算机都用数据线连接,费用将是相当庞大的。为了节省费用,我们采用数据的间接传输手段,即一台计算机可以间接...原创 2019-12-26 17:04:34 · 268 阅读 · 0 评论 -
最短路径问题【Dijkstra】
题目链接传送门DescriptionDescriptionDescription平面上有n个点(N<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点直线的距离。现在的任务是找出从一点到另一点之间的最短路径。InputInputInput输入文件short.in,共有n+m+3行,...原创 2019-12-27 21:55:28 · 604 阅读 · 0 评论 -
香甜的黄油【SPFA模板题】
原题链接传送门DescriptionDescriptionDescription农夫John发现做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。 农夫John很狡猾。像以前的Pavlov,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打...原创 2019-12-28 12:03:09 · 341 阅读 · 0 评论 -
luogu P3371 单源最短路径(弱化版)
原题链接luogu传送门题目描述题目描述题目描述874如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。输入格式输入格式输入格式第一行包含三个整数 nnn,mmm,sss,分别表示点的个数、有向边的个数、出发点的编号。接下来 mmm 行每行包含三个整数 uuu,vvv,www,表示一条 u→vu→vu→v 的,长度为 www 的边。输出格式输出格式输出格式输出一行 n...原创 2019-12-28 16:33:16 · 270 阅读 · 0 评论 -
城市问题【SPFA】
原题链接传送门DescriptionDescriptionDescription设有n个城市,依次编号为0,1,2,……,n-1(n<=100),另外有一个文件保存n个城市之间的距离(每座城市之间的距离都小于等于1000)。当两城市之间的距离等于-1时,表示这两个城市没有直接连接。求指定城市k到每一个城市i(0<=I,k<=n-1)的最短距离。InputInputInput...原创 2019-12-28 17:07:02 · 239 阅读 · 0 评论 -
最小花费【Dijkstra】
原题链接传送门DescriptionDescriptionDescription在n个人中,某些人的银行账号之间可以互相转账。这些人之间转账的手续费各不相同。给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元。InputInputInput第一行输入两个用空格隔开的正整数n(n<2000)和m,分别表示总人数和可以互相转账的人的对数...原创 2019-12-28 08:56:07 · 217 阅读 · 0 评论