- 2024-10-20dij算法与小根堆
dij即利用一个小根堆每次取出队头元素,利用队头元素对其他点进行松弛每当一个点出队,说明他已经是被最小元素松弛过,那么不可能有更优解,那么便打上标记松弛时注意目标点是否已经出队,如果出队说明不能再被松弛注意:dij只能用于没有负边的图内复杂度为O(mlogm)structnode{in
- 2024-10-17「模拟赛」多校 A 层联训 8
\(22pts\),本来可以切掉前两个题的?!A.传送(teleport)签到12pts,错的很唐!我把Dij用的dis数组直接赋值成了点到1号点之间的x距离和y距离的最小值,没再赋成极大值,这样会改变Dij过程中点遍历到的顺序,然后就跑不出最短路了。好像不能算挂分?但其实赛时有点感觉是这的问
- 2024-10-1010.10日noip多校联考总结
10.10日noip多校联考总结T1感觉就是个dij再多记录一个换乘次数然后就像普通dij一样跑就行了。但是必须得将换乘次数放进dis数组中当成一个状态记录下来,不能只记录在堆中,不然做法会假。T2发现m=0的部分分就是用一个数据结构维护区间最大子段和。m=1/2就是同时维护一个最大值
- 2024-09-14[JOI2018]定期券 (Commuter Pass)
\(\mathtt{TAG}\):最短路,DP,拓扑排序题意给定一个\(n\)个点\(m\)条边的无向图,边有边权。给定两对点\(s_1,t_1\)和\(s_2,t_2\)。你可以选定\(s_1\)到\(t_1\)的一条最短路径,使得这些边的边权变为\(0\),要求操作之后\(s_2\)到\(t_2\)的最短路长度最小。First.\(
- 2024-08-02dijkstra的封装模版
/**-swj-*/>_____フ|__|/`ミ_xノ/|/ヽ?/ ̄|||||( ̄ヽ__ヽ_)_)\二つ**/#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;structDIJ{
- 2024-07-19暑假集训CSP提高模拟2
A.活动投票主元素问题,用摩尔投票#include<bits/stdc++.h>usingnamespacestd;intn,a=-1,acnt,x;intmain(){ scanf("%d",&n); for(inti=1;i<=n;++i){ scanf("%d",&x); if(acnt==0){ a=x; acnt++; } elseif(a==x){ acnt++
- 2024-07-16最短路算法(总结性,无Dij)
Floyd利用中介点k进行操作记f[x][y]为xy点之间的最短路径长度其中f[x][y]=min(f[x][y],f[x][k]+f[k][y]);即用k进行松弛操作其中f[x][y]的取值当xy有直接连边时:f[x][y]=w(x,y)当无直接连边时:f[x][y]=+∞当x=y时:f[x][y]=0实现:for(k=1;k<=n;k++){for
- 2024-07-03考试题解
20240703DSroundT1考虑区间子区间问题直接扫描线加历史版本和,考虑修改。现在扫到\(r\),线段树每个位置\(i\)维护的是\(i\)到\(r\)的区间\(lca\),这些\(lca\)的深度具有单调性,考虑直接二分一下位置,然后\(r\)扫到\(r+1\)时,深度大于\(lca(r,r+1)\)的\(
- 2024-07-01Codeforces Round 918 G. Bicycles (二维最短路)
G.Bicycles题意:在一个无向图里你要从1点到达n点,每条路的路径长度是该路的权值乘于你当前的慢度因子。而在每个点上我们都有一个慢度因子可以进行更换,问你到达n点所需要的最短时间。思路:我们很容易想到每次遇到更小的慢度因子我们就要更换,但因为存在你先去绕远路拿更小的慢
- 2024-03-30【图论】3.30学习记录 k短路(A*算法)
从最短路说起的k短路3.26看了最短路和次短路。我们发现次短路实际上就是把最短路给破坏掉然后跑最短路...那我想...是不是破坏(k-1)次就能得到k短路呢,很显然是的,但是复杂度比较高,(因为一次dij是O(nlogn)级别的,次短路的话最坏要跑m次当最短路有m条边的时候)那么k比较大的时候就
- 2024-03-17旅行者
新方法get法一:我们考虑最终的答案,一定是从某一个关键点\(A\)走到另一个关键点\(B\),那我们要找一种最短路径,保证中途经过两个关键点,而且能够覆盖所有的关键点对。所以我们考虑把其中一部分关键点作为起始点的下一个点,剩下的关键点作为终点的上一个点,于是我们建立两个虚点\(s\)
- 2024-03-04Codeforces Round 930 (Div. 1) C dij 建图
离较好的方法差一点。考虑到了可以按照枚举属性并按照当前属性从小到大排序,这样可以从一个点到大另一个点。设当前在排序序列中点为\(i\)当\(i\)走向\(k,i>=k\)需要支付\(c_k\)的代价。而\(i\)到\(k,i<k\)则需\(k-i+c_k\)的代价。则对于不同的\(i\)由于代价没有连续性,当时想
- 2023-11-26AcWing 1126. 最小花费 (从终点方向求的dij -> 注意本题这么求就必须判断两点之间是否有边
package算法提高课;importjava.util.Arrays;importjava.util.Scanner;publicclassacw1126{staticintn,m;staticint[][]g;staticdouble[]d;staticboolean[]st;privatestaticvoidinit(){g=newint[n+10][n+10];
- 2023-11-26AcWing 1127. 香甜的黄油 (dij板子不能背太死, 需要知道含义灵活变通
package算法提高课;importjava.util.Arrays;importjava.util.PriorityQueue;importjava.util.Scanner;publicclassacw1127{staticintn,p,c;staticint[]id;staticint[]h,e,ne,w;staticboolean[]st;staticint[]d;static
- 2023-11-26AcWing 1129. 热浪 (dij板子题
package算法提高课;importjava.util.Arrays;importjava.util.PriorityQueue;importjava.util.Scanner;publicclassacw1129{staticclassPIIimplementsComparable{intdis,tar;//tar表示我这条边的入弧,dis表示我这条边的距离publicP
- 2023-11-26AcWing 1128. 信使 (dij板子题 + 求花费最大的那个点的花费
package算法提高课;importjava.util.Arrays;importjava.util.PriorityQueue;importjava.util.Scanner;publicclassacw1128{staticintn,m;staticint[]h,e,w,ne;staticint[]d;staticboolean[]st;staticintidx;staticclas
- 2023-11-15最短路树
定义最短路树:以图上一个点为根节点,删去部分边后所形成的树,树的边权满足任意一点与根结点的路径长度等于图上两点的最短路径长度。求法可以采用dij求解。每次更新\(dis_v\)时,记录每个点最后一次用来更新的边,即为最短路树。核心代码如下,时间复杂度为dij的时间复杂度即\(
- 2023-11-1501bfs
今天写一个最短路题边权为\(0\)或\(1\),我说这不一眼\(dij\)么?结果题解区全部写的\(O(n+m)\)的\(01bfs\)。好家伙我居然一直不知道这么个东西,花了一个小时看会了,写一下原理。实现的方法很简单,就是一个双端队列,去\(nm\)的\(deque\),我有手,可以手写。在这里讲一下正确
- 2023-10-25USACO 图论题 - from Luogu
题单记录:P2984[USACO10FEB]ChocolateGivingS这题直接按题意只有50pts,复杂度\(O(B~\cdotM\logN)\),显然超时,然后我就想啊想,发现从s->1->t跑两遍dij和1->s(t)跑一遍dij是等效的,没啥用......我居然还想了好久,才发现根本不需要每次都跑,跑一次预处理就行了....
- 2023-10-1623/10/15 模拟赛总结
时间安排7:50-8:00看题,怎么一分都不会。8:00-9:00脑瘫了,A题随便跑个dij就能过我想了半天不会处理,最后还是猜出来可能要建个超级源点,没想到过了大样例。9:00-10:40B题貌似可做,手模了几组样例,好像会了。为了验证想法写了个爆搜又造了几个小数据,做法应该是正确的,直接
- 2023-09-210-1 BFS
前言:做这道题发现dij过不了,意识到自己不会0-1BFS,遂查,发现网上的解释很多都不清楚,oiwiki好像没讲,自己证明了一下。算法过程:用于求边权为\(0\)或\(1\)的图的最短路。方法就是把dij的单调队列换成一个deque,每次更新如果用边权为\(0\)的边,把新的点放到队首,反之放到队尾,
- 2023-08-09题解 [SDOI2009] Elaxia的路线
题目链接题意简述:求两条给定起点终点最短路的最长公共路径。首先最长公共路径一定是两条最短路的公共最长链的部分。至少一定在两条最短路上。考虑如何求出一条路径是否包含于一条最短路,只要路径\(x\rightarrowy\)满足:\[dis_{st\rightarrowx}+w_{x\rightarrowy}+dis_{y\r
- 2023-03-12AcWing 第 94 场周赛 A B(最短路dij) C(最短路floyed)
https://www.acwing.com/activity/content/competition/problem_list/2961/AcWing4870.装物品水题#include<bits/stdc++.h>usingnamespacestd;typedeflonglon
- 2023-03-03hdu-1548
搜索做着做着成最短路径了。。dij本层可以直接到达的层数距离为1否则为无穷大#include<stdio.h>#include<iostream>#include<math.h>#include<stdlib.h>#includ
- 2023-01-12简单图论总结
一些碎碎念最近复习了一些简单图论的知识,主要有floyd,spfa,拓扑排序,dij,差分等等。其实真正意义上的算法就是floyd和dij以及拓扑排序(spfa目前的应用场景仅限于有负边的最短路