- 博客(31)
- 收藏
- 关注
原创 Dijkstra的堆优化
我们把点和到集合的距离放入优先队列中,优先队列自动按照距离排序,最先弹出的点就是距离集合最近的点,避免了依次枚举查找最近点。优先队列可以被视为一个堆,具有在插入和弹出元素时自动调整元素顺序的能力,因此最高优先级的元素始终在队列的前面。是把点分成两个集合,一个集合是松驰过的, 一个没有,每次让距离集合最近的点进入集合。中的第一个数的大小,若第一个数大小相同在比较第二个数。基础版我们是依次枚举点寻找距离最近的集合。中的优先队列来优化这个过程,使得算法更优。结合起来,可以不写结构体和重载运算符。
2024-11-05 21:00:23
668
原创 最短路------Dijkstra(基础版)
(2)把顶点k加入到集合1中,同时检查集合2中的剩余顶点j的d[j]是否经过k后变短,如果变短修改d[j]。if(d[k]+a[k][j]<d[j])d[j]=d[k]+a[k][j]如果图是不带负权的有向图或者无向图,从起点a每次新扩展一个距离最短的顶点,在以这个顶点为中间点,更新起点到其他所有顶点的最短距离。(1)把集合2中找到一个到源点距离最近的顶点k:min{d[k]}将顶点分为两个集合:以求得最短路的点集合1,待求点集合2。d[i]:源点到i的最短距离。d[i]=a[源点][i]
2024-10-30 07:57:04
184
原创 最短路------Floyd详细版
Floyd算法求任意一对顶点间的最短路径。时间复杂度为O(n3),适用于负边权的情况。原理if(d[i][k]+d[k][j]<d[i][j])d[i][j]=d[i][k]+d[k][j]算法实现for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(d[i][k]+d[k][j]<d[i][j])d[i][j]=d[i][k]+d[k][j]; } }
2024-10-28 17:46:19
421
原创 最短路---Floyd
使用三层循环,最外层枚举中间点,中间层枚举起点,内层枚举终点,然后对三个点进行松弛操作,即如果经过该中间点后的距离比原来的最短路径短,就更新最短路径。是唯一的多源最短路算法,即只要跑一次就可以求出任意两点间的最短路径。依次枚举中间点,不断更新矩阵,得到的最后一个矩阵就是最短路径。用邻接矩阵存图,可以处理负边权,但是不能处理负环.邻接矩阵存储最短路,即。
2024-10-28 17:34:45
307
原创 链式前向星简单理解
一条无向边的两个存储编号,找到一个即可找到另一个。可以快速访问一个点的所有邻接点。链式前向星用一个结构体和两个变量实现。不便于查找某条边是否存在。
2024-10-27 23:33:56
289
原创 「一本通 6.5 例 4」佳佳的 Fibonacci
题目S(n)S(n)S(n)表示FibonacciFibonacciFibonacci前nnn项和modmodmod mmm的值,即S(n)=(f1+f2+.....+fn)modS(n)=(f_1+f_2+.....+f_n)modS(n)=(f1+f2+.....+fn)mod mmm。其中f1=1,f2=1,f3=2,......,fi=fi−1+fi−2f_1=1,f_2=1,f_3=2,......,f_i=f_{i-1}+f_{i-2}f1=1,f2=1,f3=2,......,f
2022-05-09 11:05:27
469
原创 LOJ#10221. 「一本通 6.5 例 3」Fibonacci 前 n 项和
题意已知FibonacciFibonacciFibonacci数列f1 =1,f2 =1,f3 =2......,fn =fn+1+fn−2.f_1\ =1 ,f_2 \ = 1,f_3 \ = 2......,f_n \ = f_{n+1}+f_{n-2}.f1 =1,f2 =1,f3 =2......,fn =fn+1+fn−2.输入nnn、mmm,求fn{f_n}fn的前nnn项和$s_n $ $mod
2022-05-08 22:21:51
309
原创 LOJ#10220. 「一本通 6.5 例 2」Fibonacci 第 n 项
题意已知FibonacciFibonacciFibonacci数列f1=1,f2=1,f3=2,.....,fn=fn−1+fn−2f_1=1,f_2=1,f_3=2,.....,f_n=f_{n-1}+f_{n-2}f1=1,f2=1,f3=2,.....,fn=fn−1+fn−2输入nnn和mmm,求fnf_nfn modmodmod mmm.**数据范围:**对于100%100\%100%的数据,1≤n≤2×109,1≤m≤109+101\leq n \leq2 \times 10
2022-05-08 17:29:16
380
原创 「一本通 1.3 例 2」生日蛋糕
题目提目描述Mr.WMr.WMr.W要制作一个体积为NπN \piNπ的MMM层生日蛋糕,每层都是一个圆柱体。设从下往上数的第iii层蛋糕的半径为RiR_iRi,高度为HiH_iHi的圆柱。当i<Mi <Mi<M时,要求Ri>Ri+1R_i>R_{i+1}Ri>Ri+1且Hi>Hi+1H_i>H_{i+1}Hi>Hi+1。由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积QQQ最小。令Q=SπQ=
2022-02-27 11:17:36
323
原创 「一本通 1.3 例 1」数的划分
题目题目描述将整数nnn分成kkk份,且每份不能为空,问有多少种不同的分法。当n=7,k=3n=7,k=3n=7,k=3时,下面三种分法被认为是相同的:1,1,5;1,5,1;5,1,11,1,5;1,5,1;5,1,11,1,5;1,5,1;5,1,1。输入格式一行两个整数n,kn,kn,k。输出格式一行一个整数,即不同的分法。样例输入7 3输出4四种分法:1,1,5;1,2,4;1,3,3;2,2,31,1,5;1,2,4;1,3,3;2,2,31,1,5;1,2,4;1
2022-02-19 19:53:47
430
原创 「一本通 1.2 练习 3」灯泡 (三分
题目题目描述相比 wildleopard 的家,他的弟弟 mildleopard 比较穷。他的房子是狭窄的而且在他的房间里面仅有一个灯泡。每天晚上,他徘徊在自己狭小的房子里,思考如何赚更多的钱。有一天,他发现他的影子的长度随着他在灯泡和墙壁之间走到时发生着变化。一个突然的想法出现在脑海里,他想知道他的影子的最大长度。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkixyqO4-1645254464156)(C:\Users\Administrator\AppData\
2022-02-19 15:08:57
364
原创 「一本通 1.2 例 3」曲线
题目题目描述有nnn个小朋友坐成一圈,每人有aia_{i}ai颗糖果。每个人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为1。求使所有人获得均等糖果的最小代价。输入格式第一行有一个整数nnn,表示小朋友的个数。在接下来nnn行中,每行一个整数aia_{i}ai。样例输入41254输出4数据范围与提示对于30%30\%30%的数据,n$ \leqslant$ 1000对100%100\%100%的数据,n⩽106\leqslant 10^6⩽106,保证答案
2022-02-19 09:11:17
186
转载 luoguP3147 [USACO16OPEN]262144
转载自:https://www.cnblogs.com/xcg123/p/11305477.html原题链接: https://www.luogu.org/problem/P3147建议先食用无毒弱化版:P3146 [USACO16OPEN]248前言?这个题与上边的无毒版的不同是:数据范围 变得很大,所以我们再向上个题一样定义状态是不行的了分析新状态的设置:f[i][j]表示从j开始能合成i的区间长度状态转移方程:f[i][j]=f[i-1][j]+f[i-1][j+f[i-1][j]]
2022-01-08 11:25:33
162
原创 luoguP3205编辑距离
定义状态假设f[i][j]表示串a[1…i]转换为串b[1…j]所需的最小操作次数边界i==0,即a为空时,那么对应的f[0][j]的值就是j:增加j个字符使a转化成bj==0,即b为空时,那么对应的f[i][0]的值就是i:删除i个字符使a转化成b状态转移方程 for(int i=1;i<=lena;i++){ for(int j=1;j<=lenb;j++){ if(a[i-1]==b[j-1]){ f[i][j]=f[i-1][j-1]; co
2022-01-05 22:13:25
135
原创 luoguP1265公路修建
最小生成树模板题重点是规则2的证明规则2满足条件:1.AB<=AC;2.BC<=CA;3.CA<=CB;若1、2、3均成立,则AB=AC=BC以上证明可以说明:规则2成立是A,B,C形成一个等边三角形由于规则2成立时:政府将否决其中最短的一条公路的修建申请但是ABC是一个等边三角形所以否决那一条边都是一样的总之规则2对题目无影响小问题由于于空间的限制上, 5000 * 5000的空间大小会MLE那么我们发现题目给的是坐标,所以我们想到可以不直接存储距离
2022-01-03 20:34:24
227
原创 最小生成树——Prim算法
算法简介Prim算法采用与Dijkstra、Bellmaxn-Ford算法一样的“蓝白点”思想:白点代表已经进入最小生成树的点,蓝点代表未进入最小生成树的点。算法描述以1为起点生成最小生成树。minn[v]表示蓝点v与白点相连的最小边权。sum表示最小生成树的权值之和。初始化minn[v]=oo(v!=1)minn[1]=0sum=0简单的过程for(int i-1;i<=n;i++)寻找minn[v]最小的蓝点u;将u标记为白点;sum+=minn[u];for(与白
2022-01-03 17:02:06
1621
原创 ST表-------学习笔记
简介ST表用于解决RMQ问题和可重复贡献问题RMQRange Maximum(Minimum) Query的缩写,顾名思义就是某区间内的最大值或最小值可重复贡献问题可重复贡献子问题是指对于运算opt,满足x opt x=x,则对应的区间询问就可以是一个可重复贡献子问题。例如,最大值有max(x,x)=x,gcd有gcd(x,x)=x,所以RMQ问题和区间GCD问题就是一个可重复贡献问题。像区间和就不具有这个性质,如果求区间和的时候采用的预处理区间重叠了,则会导致重叠部分被计算两次,这是我们不愿
2021-12-12 16:05:07
414
原创 最小生成树——Kruskal算法
引例有一张城市地图,图中顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市间修建高速公路的造价,研究后发现,这个地图有一个特点,即每一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使的工程的总造价最少?考虑问题的出发点是:为使生成树上边的权值和最小,则应使生成树中每一条边的权值尽可能的小。进入正题Kruskal算法是一种巧妙地利用并查集来求最小生成树的算法Kruskal算法讲一个连通块当做一个集合。Krustral首先将所有边按从小到大的顺序
2021-12-08 15:55:29
1877
原创 luoguP1080[NOIP2012提高组]国王游戏
(重新更新了latex)不考虑向下取整是因为不考虑向下取整的最优解在向下取整的条件下不会比其余的解更劣。100%的数据范围要求使用高精乘除(不用luogu提交只有60pts)若要在②③基础上满足上述条件①则。我们需按照左右手乘积的排列大臣。...
2021-12-01 16:53:59
2261
1
原创 2021NOIP游记
2021NOIP游记赛前 日常停课。。。 前几天没有考试,自己在刷题单,发现自己的记忆真的挺差的,最短路啥的直接记不住(但是题目挺水的搜索就能过。。。。),之前学的知识也忘了个差不多(一听就知道学过,但是不会写)。 然后就开始了考试(学姐、学长们出的题!!),一直考到day1。题目难度相对来说比较亲民。 提前一天去的酒店,竟然还是学习学到了10点,我以为会早睡觉(说实话我从8点多就犯困了,下课去其他两个学姐那里溜达了一圈,好多了赛中 首先当然是通读一遍题目。t1 先是想
2021-11-21 10:35:39
262
原创 CSP-S复赛总结
考前。。。考试前有跟着学长,学姐考了几次提高组的题(似乎学长们认为题目没到提高的难度。。。),总是在0的边缘徘徊(20,30分左右吧)。最主要的是正解想不出来(没想过正解。。),暴力也不会打,感觉挺糟的。 但是学姐一直有鼓励我!!!(感谢) 对csp充满了未知与迷茫。考试ing 考试的时候浏览了一下题目,感到不太对劲。除了t1其他毫无思路。T1 虽然t1有思路(暴力)。但是能拿的分不多,毕竟枚举的复杂度...
2021-10-24 17:27:06
1294
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人