自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 收藏
  • 关注

原创 我如何花费一周的时间学习并定制自己的vim?带你从零配置你的vim,打造专属于自己的IDE

为什么需要自定义vim,进行自定义vim之前一定要搞清楚这个问题。虽然网上有很多现成的vim配置(通过关键字vim或者dotfiles便可以检索到),这些配置拿过来往往只需要一两句命令便可以将你的vim变成一个完全现代化的IDE,但是我是非常不推荐直接将别人的配置拿来进行使用的,如果直接将别人的配置拿来使用,那你直接在下载一个IDE并在里面装一个可以支持vim三种模式的插件不就完成了所有的操作吗?为什么还需要单独去使用vim呢?在我看来使用vim的插件是因为vim。

2024-04-23 16:30:10 1042 2

原创 算法题目题单+题解——图论

本文为自己做的一部分图论题目,作为题单列出,持续更新。。对于同一个一级标题下的题目,题目难度尽可能做到递增。

2024-02-04 21:22:03 689

原创 A brief introduction of the Waiting Move and the SG Theorem

What is the waiting move? Let me show you by a simple example:There are nnn numbers, and they are 1,2,3,...,n1, 2, 3, ..., n1,2,3,...,n from left to right. You can your friend take turn to remove one number and remove all the divisors. For example, if you

2024-06-18 16:14:38 436

原创 The brief introduction of the Nim Game

The brief introduction of the Nim Game.

2024-06-17 15:40:21 919

原创 Notes for the missing semester. Useful and basic knowledge about Linux.

The notes for the missing semester. The course is awesome and I recommend it for all new beginners of Linux.

2024-04-30 15:53:50 763

原创 Let‘s learn some about makefiles. Knowing some basic knowledge of make is necesasary for programmers

Note: this is the notes when learning . Because I use more, this note is not resonable enough, and I just put some commands down and don’t explain the basic methodology of make.Note: even you can use to build projects, learning is still necessary. Beca

2024-04-29 11:04:38 760

原创 My own understranding of Gitflow. How to use Gitflow when developing projects within a team?

Git-flow is for better cooperation with others in some big projects.There are two common branches: and .The first one branch is for releasing projects when reaching a new version. Mostly, every commit of branch is a single version with a tag illustratin

2024-04-25 21:51:25 989 5

原创 十几年前的降维可视化算法有这么好的效果?还得是Hinton。带你不使用任何现成库手敲t-SNE。

xix_ixi​:第iii个原始数据;yiy_iyi​:第iii个输出数据;pj∣ipj∣i​:输入的条件概率;pijp_{ij}pij​:输入的联合概率;qj∣iqj∣i​:输出的条件概率;qijq_{ij}qij​:输出的联合概率;在SNEpj∣iexp−∥xj−xi∥22σi2∑kexp−∥xk−xi∥22σi2i≠jpj∣i。

2024-04-23 17:14:22 912

原创 单元最短路模板 dijkstra以及SPFA的FAQ

两道题目都是求最小单元最短路。使用Dijkstra两道题目均可以通过,但是如果使用SPFA则只能通过。

2024-04-02 20:09:37 555

原创 SVM简介 详细推导 核函数 线性可分 非线性可分

发明用于解决二分类问题的机器学习算法。在二维平面中,线性可分指的是可以通过一条直线对平面上的点进行划分使得标签相同的点在直线的同一侧,标签不同的点在直线的不同侧。在二维平面中,非线性可分则是指除去线性可分的情况。下面是一个线性可分的例子:下面是一个非线性可分的例子:对于一个线性可分的数据集,存在着多条线段均可以达到划分数据集的目的,那条直线的分类效果最好?要找到最好,我们首先要知道什么叫做好。定义了性能指标:间隔。在下图中,上下两侧经过的点是支持向量,而上下两条直线之间的距离即间隔。认为间隔越大的直线越

2024-04-02 16:49:23 802

原创 LibreOJ 137. 最小瓶颈路(加强版) 题解 Kruscal重构树 ST表

上面结论的证明我们可以参考Krusca求解最小生成树的过程,对于当前可以加入的一条边(u, v, w),u和v之间的最小瓶颈路当前这条边,因为在之前的过程中经过权重比w小的边不能使u和v连通,根据这个过程我们便可以发现第一次让u和v相连的边的权重就是最小瓶颈路(这也是为什么Kruscal重构树可以求最小瓶颈路的原理),而不难发现这个值也就是u和v路径上的边权最大值。u和v两个结点之间最小瓶颈路指的是u和v的每条路径中经过的最大边权的最小值。的时候,每选择一条边的时候,我们创建一个新的结点。

2024-03-04 19:59:38 547

原创 LibreOJ 136. 最小瓶颈路 题解 最小生成树 倍增

给出结论:无向图的最小瓶颈路与其最小生成树上两个结点之间最小瓶颈路值相等。有了上述的结论,我们只需要求出最小生成树,然后通过树上倍增的方式,每次询问。之间的最小瓶颈路当前这条边,因为在之前的过程中经过权重比。给定一张无向图,询问两个结点之间的最小瓶颈路。求解最小生成树的过程,对于当前可以加入的一条边。相连的边的权重就是最小瓶颈路(这也是为什么。的每条路径中经过的最大边权的最小值。重构树可以求最小瓶颈路的原理)。两个结点之间最小瓶颈路指的是。上面结论的证明我们可以参考。路径上的最大值即可。

2024-03-01 17:24:03 223

原创 LuoguP2482 [SDOI2010] 猪国杀 题解 大型模拟题

当你发现如论如何也想不知道遗漏了什么之后,你可以将题解代码中的输出注释删除,其运行后会输出每一名角色进行的操作以及操作后的角色状态。一群猪玩猪国杀(类似三国杀),按照特定的规则出牌,问谁能获胜,输出获胜时,存活的猪的手牌。按照上面的思路实现,或者按照自己的思路实现,在实现的过程中注意提到的细节即可。注意到上面的点之后,我们便可以开始做题了。

2024-02-29 21:51:33 575

原创 Luogu P1135 奇怪的电梯 题解 Floyd 动态规划 DP

层,如果上或者下后超出了楼层范围那么此次操作无效。的最短路径长度,可以用单源最短路进行求解,也可以使用。我们将电梯的楼层看成点,若一个楼层。经过上述操作之后,原问题转换为求点。有一个电梯,电梯的层数是从。层最少需要多少次操作。开始递增的整数,共有。

2024-02-22 21:09:13 224

原创 Luogu B3647 【模板】Floyd 题解 Floyd 全源最短路 动态规划 DP

之间是否存在边,如果不存在边则为无穷大,如果存在边则为边权,如果。,不难发现上面的方程中第一维可以省略,也就变成了。给定一张无向图,求解任意两个点之间的最短路。除起点与终点外不经过编号大于等于。算法中,我们定义的状态实际是。,第一部分表示不经过结点。

2024-02-22 20:59:54 288

原创 Luogu P1515 旅行 题解 动态规划 DP

位置,你每次能够移动的距离区间。中最后一个点有多少中移动方案。轴非负半轴有一些点,点集记为。使用动态规划进行求解,定义。,每次移动到达的点必须在。

2024-02-22 20:51:15 188

原创 Luogu P6175 无向图的最小环问题 题解 Floyd

给定一张带权无向图,求出经过至少三个不同的点的最小环,环的大小由经过的边权和决定。之间是否存在边,如果不存在边则为无穷大,如果存在边则为边权,如果。对于一个最小环我们如果设其经过的编号最大的结点为。,上面的方程中第一维可以省略,也就变成了。算法中,我们定义的状态实际是。除起点与终点外不经过编号大于。,则不难发现至少存在两个结点。数组之前,计算出最大编号为。之间还存在一条不经过。

2024-02-21 20:05:24 313

原创 Luogu P4568 [JLOI2011] 飞行路线 题解 最短路 Dijkstra

只需要在求单源最短路的时候增加一个状态。给定一张带权无向图,以及起点。表示当前将几条边边权变成了。,通过将距离数组变成二维,,此时还有一种更新方式,即。,对于当前正在遍历的状态。设与其相连的一个结点为。则表明还可以将边变为。

2024-02-21 16:08:18 490

原创 Luogu P5905 【模板】全源最短路(Johnson) 题解 全源最短路 Johnson算法

其思想就是将一个含有负权边的图变成无负权边的图之后,跑。首先解释修改边权后一定不存在负边,在最短路中如果存在。,因此只需要在最后减去多加的一部分即可获得最终的最短路。这也就表明修改后的每条边权值均为正。给定一张有向图,求出任意两点之间的最短路。上述算法的时间复杂度为。之间的最短路依次经过。

2024-02-21 15:53:43 373

原创 Luogu P3547 [POI2013] CEN-Price List 题解 BFS 广度优先搜索

的边,可以通过前向星实现(建立双向链表)。的这条边更新过,后续通过这条边的距离一定会更大,因此不需要重复遍历。我们只需要求出上面三种情况的最短路取最小值即可。的边进行优化,最会只可能剩下一条或者零条边权为。对于情况三我们可以发现最多只会经过一条边权为。否则不会更优,那么既然这样,每有两条边权为。一定小于后遍历的点的距离,如果之前通过。的无向图,现在将所有两点之间最短路为。求得一次的单元最短路的结果记为。的边,则可以进行走一次边权为。的边,如果将原图的边权改为。的无向边,问到给定点。可以知道先遍历的点的。

2024-02-21 11:11:45 909

原创 Luogu P2860 [USACO06JAN] Redundant Paths G 题解 Tarjan 无向图缩点 边双连通

而对于环上的任意两个点,他们之间一定存在至少两条路径(顺时针与逆时针沿着环走)。首先我们考虑一个没有环且连通的无向图,这个时候这个无向图也就变成了一棵树。(若叶子结点个数为单数,需要将最后一个叶子结点与任意一个叶子结点相连接,如果只有一个叶子结点,那么将其与根节点相连即可)。的过程中我们走过一条边就要将其与反向边打上标记,不走反向边,其余的过程与有向图缩点一致。给定一张连通的无向图,问最少添加多少条无向边,使得任意两个点之间存在至少两条路径。综上,首先将所有的环缩成一个点,然后对新图中出度为。

2024-02-08 11:07:02 562

原创 二十多篇文献带你读懂分布式学习与联邦学习优化思路 调度优化 压缩算法 聚合算法

联邦学习的提出是为了解决用户隐私问题。在其提出后得到了迅速的发展。联邦学习研究方向包括聚合算法、安全协议、通信效率等方面。通信效率方面的研究指通过一系列新的算法减少通信数据量或者改进通信架构来提高数据交换的效率。本文对该方面的研究论文进行总结分析,主要介绍整个研究现状、研究进度以及存在的困难和挑战。

2024-02-08 10:27:50 1740

原创 Luogu P5058 [ZJOI2004] 嗅探器 题解 Tarjan 割点

不能进行通信,这说明强连通分量增加了)。我们只需要考虑哪些割点是满足条件的。一定不能是之前遍历过的点(如果是之前遍历过的点,那么删除。我们很容易发现要删除的点一定是割点(按照题意,删除后,如果不存在这样的点,输出。如果有多个这样的点,输出编号最小的。在这些新产生的联通分量中的某一个,那么。,你需要找到一个点(这个点不能是。均会产生一个新的强连通分量,如果。一定是成立的,因此只需要判断非。在这些联通分量中的一个也就是。给定一张无向图,以及两个点。明显是满足条件的(删除。,那么对于其所有满足。

2024-02-07 15:25:31 359

原创 POJ 2117 Electricity 题解 Tarjan 割点

表示有多少个子结点能够返回到当前结点或者当前结点之前遍历的结点,那么不难发现,删除当前结点后会增加的强连通分量的个数即为。经过上面的操作后,我们只需要对每个结点删除后增加的强连通分量个数取最大值与。表示有多少个子节点,不难发现删除根节点后增加的强连通分量个数为。给定一张无向图,问删除一个结点后最多会有多少个强连通分量。接下来我们只需要计算出删除每个割点会增加的强连通分量个数。表示初始的图中有多少个强连通分量,该值可以通过。对于一个强连通分量中的根节点而言,用。,对于一个强连通分量中的非根结点,用。

2024-02-07 14:53:25 549

原创 HDUOJ 4738 Caocao‘s Bridges 题解 桥 割边 Tarjan

题目也就是需要我们求一条桥边,这个桥边所拥有的边权最小。我们只需要求出所有的桥边,然后对边权取一个最小值即可(需要注意边权为。给定一个无向图,你可以选择最多删除一条边,删除边的代价是边的边权(特殊地,删除一条边权为。是否成立,不过需要注意的是由于可能存在重边,所以我们在搜索的时候不应该通过反向边更新。同时需要注意的是,对于一个本身就不连通的图,那么最小的花费是。),问最小代价使得图不连通。如果无论如何图都是连通的,那么则输出。之间的边是否是桥,我们只需要判断。的边我们要将其变成边权为。

2024-02-07 12:36:46 282

原创 POJ 1523 SPF题解 Tarjan 割点

如果当前遍历的结点存在一个子结点不能够回到已经遍历过的结点,那么当前遍历的结点便是一个割点(这样的依据是删除当前的结点后,这个不能回到遍历过的结点的子节点会变成一个新的强连通分量),如果我们记录。表示当前结点有多少个子结点不能够回到已经遍历过的结点,那么不难发现对于非根结点而言,如果当前的结点是一个割点,那么会产生。个儿子所在的强连通分量和当前结点父亲所在的强连通分量)个强连通分量。给定一张连通的无向图,问哪些结点是割点,分别删除各个割点时会产生几个强连通分量。是根节点是一个割点,删除根结点会产生。

2024-02-07 12:23:40 425

原创 POJ 1236 Network of Schools 题解 Tarjan 缩点

给定一张有向图,问最少在多少个结点上保存文件,使得这些文件可以发送给所有结点,如果一个结点保存的有文件,这个结点可以将文件发送给所有该结点可以到达的结点。的结点个数,只需要在这些结点上面保存文件,所有的结点便均可以收到文件。对于一个强连通的图(除去单个结点组成的图),其各个点的入度与出度均不为。的点,我们只需要建立其到任意一个环(此时一定存在环)上的点的边即可。经过上述的操作后,每个结点一定在一个环上,且每个环都至少和一个环共用一个结点,因此此时图是全联通的,上述操作显然只会增加。另一个结点的入度增加。

2024-02-06 19:17:23 355

原创 LibreOJ 10091「一本通 3.5 例 1」受欢迎的牛 题解 Tarjan 缩点 Toposort DAG DP

因此我们可以先将原图进行一次缩点,在同一个强连通块里面的点是可以互相到达的,因此我们只需要考虑缩点的新图上每个点可以从多少个点到达。也就是在新图上面进行。给定一张有向图,问有多少个结点可以从其他所有的结点到达。求出每个结点可以由多少个结点到达,也就是定义状态。表示有多少个结点可以到达结点。

2024-02-06 18:11:08 277

原创 Luogu P3388 【模板】割点(割顶) 题解 Tarjan/割点

割点的定义:删除一个点及其连接的边后,若能使图的联通块数量增加,那么被删除的这个点叫做割点。对于根节点,容易发现只要其有多余两个儿子结点则其是割点。结点不会产生新的联通块,如果所有的儿子结点均满足上述的条件,这个结点所在的联通块不能与之前某个遍历的结点相连,也就是说。给定一张无向图,输出割点个数以及割点编号。而如果存在某个儿子结点。经过上述的操作后,对于非根节点结点。(不包含父亲边,除非存在重边)中。出发通过某条边回到某个先于。遍历的结点,也就是删除。算法即可,也就是利用。

2024-02-05 18:40:48 258

原创 POJ 1780 Code 题解 欧拉通路 利用栈实现递归

有一种比较暴力的方式可以破解保险箱,即依次从最小的数字输入到最大的数字,例如密码是两位数字,只需要依次输入。位与当前的按键进行拼接,在最优的情况下我们可以保证,每一次按键会产生一个之前没有出现过的密码串,因此对于所有的密码串可能:第一次需要输入。实际上上面建立的图的欧拉回路的起点编号与经过的边的边权组成的序列即为所求序列。,对于这个密码,我们在其后面追加一个按键的时候,其有效的输入就变成了原密码的后。位十进制数字,这个保险箱只要输入包含密码的子串,保险箱就会会打开,例如密码为。

2024-02-05 12:21:35 1021

原创 Luogu P2731 [USACO3.3] 骑马修栅栏 Riding the Fences 题解 欧拉通路/欧拉回路

需要注意的时由于每一条无向边只需要经过一次,所以每次进行删除操作的时候,需要将对应的反向边给删除掉。给定一个无向图,求出一条字典序最小的路径(路径通过经过的点来表示),这条路径还需要满足每条无向边经过且只经过一次(不能来回经过)。我们需要找到字典序最小的一条欧拉通路或回路。因此我们首先需要确定起点,如果存在一个点的度数为奇数,那么这个点就是起点,否则我们应该选择编号最小的度数非。同时由于需要输出字典序最小的路径,因此我们可以使用邻接表进行存边,对每一个结点连接的边按照到达结点编号从小到大排序,这样使用。

2024-02-05 11:37:04 235

原创 Luogu P6066 [USACO05JAN] Watchcow S 题解 欧拉回路

除此之外,对于有些题目会要求无向边只经过一次,我们在删除边的时候需要将其反向边也给删除掉,而如果使用邻接表进行存边的话,我们需要保存反向边的编号,同时对于自环需要额外注意反向边的编号差异,而如果使用链式前向星则可以通过。算法可以找环,所谓的删除边的操作,我们则可以每遍历一条边即将边给删除,这样只需要一次遍历即可找到欧拉回路或者欧拉通路(因此时间复杂度为。给定一张无向图,输出任意一条从一号结点出发的欧拉回路(欧拉回路指每条无向边来回经过且只经过一次),给定的图保证这样的欧拉回路存在。标志来实现删除边的效果。

2024-02-04 21:59:46 276

原创 理解该程序输出,Python精进一步

某日,某君抛给我一段python某君不理解程序的输出,想要我解释一下。再继续阅读之前,读者不妨思考一下程序的输出。

2024-01-24 20:51:54 375 1

原创 使用C++标准库中的提供的算法及适配器提供提升代码的可读性

最近学习了C++标准库中的algorithms(算法)和adaptors(适配器)后,决定写一篇文章整理经常使用的算法以及适配器。使用这些算法和适配器可以更好的提升代码的可读性。

2024-01-12 10:16:14 762

原创 【元编程】C++ Parameter Pack 从编译期循环到编译期判断质数

本来是想在网上找一下这个问题:利用C++实现编译期确定1~100内的质数。但是并没有找到很好的教程,于是打算自己从编译期循环一步步做一个简单的实现。

2024-01-02 21:17:23 1156

原创 C++智能指针介绍

智能指针除了能够实现对于指针的智能管理之外,其同样可以对于任意的需要申请以及释放的资源进行智能管理。上面通过自定义deleter通过对打开文件的自动关闭。

2023-12-14 17:31:45 830

原创 现代C++的多线程开发

早期的C++进行多线程编程,往往需要根据不同的系统编写不同的代码,但是在C++11之后,std中已经提供了多线程的支持,所以对于不同操作系统只需要编写一次代码即可。C++11。

2023-12-12 20:50:52 1020

原创 C++临时对象生命周期

可以思考一下上面的代码能否通过编译?如果可以会输出什么?

2023-12-06 17:25:43 1039

原创 C++ 左右值、左右引用、万能引用、引用折叠、完美转发详解

首先我们需要知道什么叫转发,这里的转发指的时,函数调用过程中参数的传递过程。完美转发则是指参数转发过程中保持其参数类型(指左右值),最外层函数如果传入的是一个右值,那么其希望在转发过程中该参数始终绑定到一个右值引用上(即继续作为右值),如果传入的是一个左值,那么其希望始终绑定到一个左值引用上(即继续作为左值)。

2023-12-03 20:16:00 1314

原创 C++ std::lower_bound,std::upper_bound辨析,常用实例

由于与均只能查找第一个满足条件的元素,因此我们需要进行转换:最后一个小于value的元素位置等价于第一个大于等于value的位置-1。}) - 1;同样先进进行转换:最后一个小于等于value的位置等价于第一个大于value的位置-1。}) - 1;该部分只需要比较最后一个元素与value的大小关系即可。该部分只需要比较最后一个元素与value的大小关系即可。同样我们需要转换成查找第一个:最后一个大于value的位置等价于第一个小于等于value的位置-1。}) - 1;

2023-12-02 14:22:45 1843

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除