随笔分类 - 最短路
摘要:分层图题解很少啊,来个分层图哒 这道题一开始看,我是想的跑两次最短路,一次从起点跑,一次从终点跑,然后枚举每一个灌木,但是因为起点的时候不能走骑士,所以会$WA$,只有$60$分。正解分层图最短路,在找到灌木的时候,向骑士那一层连一条边即可,从起点跑一遍最短路即可。 这里用的$SPFA$ SPFA没
阅读全文
摘要:最近做了好多二分+最短路的题啊 看到环之后就能想到SPFA判环了,但是具体怎么建边呢?我们把一个字符串的前两个字符看作一个节点,后两个字符看作一个节点,前面的向后面的连边(有向),边权为这个字符串的长度,这样,就把图建了起来,并且符合我们跑最长路找环的思想。但是,我们总不可能把所有环找出来看最大值吧
阅读全文
摘要:这道题我又用的Ford。谁叫Ford好写啊。 出现负环就会一直重新更新一个节点,而一个点最多只会被更新$n-1$次,所以跑完$Ford$后,再看有没有节点可以更新即可。 代码: #include <bits/stdc++.h> using namespace std; struct node{ in
阅读全文
摘要:这道题都没有用Ford的啊,跑的比SPFA还快,不加优化就可以过... 看到这一组组的不等式,就可以想到差分约束了,但是这道题需要进行转化,我这里跑的是最短路(好多大佬都跑的最长路qwq)。 \(b\ge a-c\) \(a\ge b+c\) 这个变化就得看好了$a\ge b$ && \(b\ge
阅读全文
摘要:啊这,为什么一道看上去完全跟图论无关的题有图论标签。 正题(以下没有特殊说明,均求的是最短路): 差分约束系统&&转化: 顾名思义,差分约束系统就是给你很多个形如$x_1-x_2\leqslant c_k$的不等式(其中c为常数),让你求出一组解或者判断无解。看上面的式子,把它变成这样:\(x_1\
阅读全文
摘要:这道题难就难在建图吧,建图懂了之后,跑一遍最长路就好了(也就是关键路径,但是不会用拓补排序求qnq,wtcl)。 怎么建图呢?先不管输入的S,看下面的输入,直接建有向边即可,权值为x。如果现在跑最长路的话,没有一个出发点,那是不行的,所以我们可以想到建一个点,去连接一下入度为0的点,边权为多少呢?这
阅读全文
摘要:这道题可以暴力哒~ 我们枚举每一个出现过的容量,然后跑一次最短路,求延迟,在跑最短路的时候,如果遇到的某一个点,比我们当前枚举的那个点小,那么就直接不走这一个点,然后枚举完后,就能得到最大值了。 代码~ #include <bits/stdc++.h> using namespace std; st
阅读全文
摘要:这道题题目真的想吐槽一下...是在机房同学的解释下才看懂的。就是让你求在可以删一条边的情况下,并且删后保证可以到达终点时,求删了后的最大的最短路径。 70分暴力思路: 枚举删边,然后跑一下最短路即可,思路很简单,下面给出70分代码: #include <bits/stdc++.h> using na
阅读全文
摘要:这道题应该就是模板题了吧qwq。 统计每一个牧场的放糖的情况,选择最优的即可 有亿点水的绿题。 #include <bits/stdc++.h> using namespace std; int n , p , c , ans = 0x3ffffff , sum; int vis[810] , di
阅读全文
摘要:这道题其实就是求最长路顺便再判断一下正环而已。 这种题肯定要用SPFA的啦,有又正边权(因为最长路所以正边就相当于负边),又是正环(同理,相当于负环),SPFA专治这种问题。 当一个点入队多次的时候,说明就形成了一个环,在这个地方一直更新,所以当一个点入队超多n次时,就判定为环。 #include
阅读全文
摘要:对于一个有向图,我们要求多个点到一个点的距离怎么办?反向存图 拿这道题为例子吧qwq \(Link\): 我们求完1到所有的点的距离后,最朴素的做法就是再对每一个点跑一次最短路。但是这样做肯定会超时的,因为我们只用求多个点到一个点的距离,但是我们求了这些点对其他点的距离,这根Floyd有什么区别吗(
阅读全文
摘要:做完冻结后在做这三道题,简直爆切,直接四倍经验$STO$。 飞行路线: 几乎跟冻结一模一样就不讲啦 #include <bits/stdc++.h> using namespace std; int n , m , k , ans = 0x3ffffff , s , ee; int dis[1000
阅读全文
摘要:之前没学分层图,所以先咕了一下hiahiahia。 学完分层图了回来水写题解了。 这道题要用分层图来解。分层图就是在我们决策的时候,再建k层图,一共k+1层,层与层之间是有向边(这个很重要的),权值为我们进行决策后的代价,而每一层互相连的什么都不变。对于这道题,就像这样建图: for(int i =
阅读全文
摘要:先用做的暴力,因为n最多才3000嘛,但是后来发现时间复杂度不止$O$(\({n}^2\)),然后就放弃了。 讲讲我的暴力+错误思路吧: 把1到s1和s2的最短路算出来,用SPFA,然后用DFS求出所有的最短路的路径,然后两两枚举,看哪个重合的点数最多,然后输出其他点所连接的边的个数。如果你这样想,
阅读全文
摘要:这道题真的很女少啊 言归正传: 这道题其实就是考验的思路,读题后,我们发现对于某个点他所连接的点必须连接终点,那么我们直接反向存图,从终点进行bfs,可以找到未连接的点,然后对这些点所连接的点进行标记,最后来一遍最短路就OK了。 SPFA好啊 上代码: #include <bits/stdc++.h
阅读全文
摘要:这道题用一次SPFA就可以过了。在求最短路的同时,对答案进行统计即可。 实现: $dis_i$表示从1到$i$的最短路(实在还是不懂的话看程序吧)。 当$dis_i>dis_j+1$时,直接令$ans_i=ans_j$即可。 当$dis_i=dis_j+1$时,那么到$i$的路径就可以多加上$j$的
阅读全文
摘要:这道题还是挺水的,广搜模板题,注意一下细节就是了。 :码代上上代码: #include <bits/stdc++.h> using namespace std; int n , m , sx , sy , ans = -1; int dx[] = {1 , 0 , -1 , 0} , dy[] =
阅读全文

浙公网安备 33010602011771号