
算法
文章平均质量分 52
He_xj
一枚努力学习的同学
展开
-
数据结构——图
按照边的有无方向可以分为有向图和无向图;显然有向图就是有一个指向表示(一条边为 而向图则表示A与B是连通的:即对于无向图都是成立的)1. 端点和邻接点:2. 顶点的度、出度和入度ABCD点出度入度A10B11C013. 完全图这就是一个有向完全图ab这就是一个无向完全图AB4. 稀疏图和稠密图5. 子图设有两个图和,如果V’是V的子集,即⊆\subseteq⊆ 且是的子集即⊆\subseteq⊆ ,则称G’是G的子图注意:并非V和E原创 2022-06-04 17:05:20 · 4519 阅读 · 0 评论 -
潜水员 --二维费用背包问题
题目链接 -----> 潜水员这个题目一开始看得我匪夷所思这个题目也可以是看做,有条件的二维费用背包问题 吧条件如下1.氧气至少为 m2.氮气至少为 n3.所用的气缸的体积要尽可能的小从上述的条件中 存在 至少这个字眼 那么这个问题要如何解决呢因为存在至少所以肯定存在某种情况使得这个气缸中的气体的体积大于所需要的气体的体积,那我们怎么做呢?这个时候就要用到 y总说的了: 用0来代替体积为负数的情况因为 当这个体积是 负数的时候说明此时的气体已经够用了,所以我们可以直接用*原创 2022-05-16 17:45:06 · 270 阅读 · 0 评论 -
洛谷P4017 最大食物链计数 --- 拓扑排序
题目直达 ——> 最大食物链计数一开始以为是 并查集 当我写了一半才发现是要一整条链, 所以就想到了 拓扑排序 😦Before anything else:什么是拓扑排序?那么咱就来说一下对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列原创 2022-05-15 21:21:45 · 595 阅读 · 0 评论 -
信息学奥赛一本通--城堡问题
这题其实很简单原题链接 --------------》 点击我折磨自己这个题目搞就搞在他给你的输入让你摸不着头脑;就拿11来说吧,因为11可以分解成11 = 8 + 2 + 1也就是说在这个位置的west,northandsouth都有墙也就是说他是这样子的 wallwall 空间 wall就是这样子的我们将11转换为二进制后会发现 (11)2(11)_2(11)2 ----> 1101 是不是很神奇然后我们将整个东北西南方向写成dx[] = {0, -1原创 2022-05-12 21:01:15 · 212 阅读 · 0 评论 -
Kruskal算法求解最小生成树
Kruskal 算法的思路还是非常的简单的先将所有的边都用一个结构体存起来经所有的边按照权重排序即可(因为我们要求的其实就是极小连通子图,所以我们排序后可以直接对边进行连接即可,因为我们将所有的点都放入集合后,得到的边权之和一定是最小的)最后就是函数内部实现,既然我们谈到了 集合中,那么如何判断这个点是否在集合内部呢? 这是我们就可以使用并查集这个算法了。//并查集int find(int x){ if(x != p[x]) return p[x] = find(p[x]);//路径压缩原创 2022-05-10 20:54:44 · 251 阅读 · 0 评论 -
染色法判定二分图
EASY题目来自Acwing.com这个题目主要是要搞清楚“二分图”的定义,以及如何判断二分图 二分图 ;就很好做了首先,染色法嘛;所以我们给第一个点染上颜色 1;然后给所有与一号店联通的点染上颜色 2;再给 染上2号点的所有的连通的点染上颜色 1;如此循环,假设存在一个奇数边的环那么我们可以轻而易举的推测出,开始的那个点会被染上俩个颜色因此:存在奇数条边的环(奇数环)不可能是二分图,具体的证明可以看那个链接代码如下:Code:#include <iostream&g原创 2022-05-10 20:46:47 · 162 阅读 · 0 评论 -
博弈论(NIM游戏)
这个题目还是非常有意思的首先 先手的状态有三种先手必赢: 先手的下一个状态是必输状态(也就是说先手拿完以后的下一个状态是必输状态)先手必败:1. 先手的下一个状态是必赢状态(这跟着上面的想也能想出来吧)2. 没有后继状态的话也是先手必输(因为先手拿完以后就没有后继状态了,所以先手拿的一定是最后一个,所以必输)我们可以使用异或运算来解决这个问题没有后继状态就是 0 ^ 0 ^ 0 ^ 0 = 0这样的话开局就是0所以先手根本无法下手 —》 必输!!先手的下一个状态是必输状态))原创 2022-05-10 20:43:09 · 586 阅读 · 0 评论 -
线性筛法求前N个数的欧拉函数之和
首先回顾线性筛法void get_prime(int n){ for( int i = 2 ; i <= n; i++ ) { if(!st[i]) primes[++cnt] = i; for( int j = 1 ; primes[j] <= n / i ; j++ ) { st[i * primes[j]] = true; if( i % primes[j] == 0 ) b原创 2022-05-08 20:48:07 · 338 阅读 · 0 评论 -
二分图的最大匹配
这是一个非常有意思的题目(doge)题目链接 ----》配对题目的过程大致如下:1.先把所有的边都存入邻接表中2.开始遍历每一个男孩的心仪的女孩3.如果这个女孩还没有和别人在一起,那么就选择这个女孩做女朋友 || 如果这个女孩(ali)已经有男朋友了,那么就反向搜索她的那个男朋友(bob)``paring[i]是否还有另外的女孩(kel)没有男朋友并且bob正好对kel也有好感,那么就拆散bob和ali让bob和kel再一起,然后再让ali和eric(新加入的男孩)在一起就可以了4..原创 2022-05-08 19:19:59 · 107 阅读 · 0 评论 -
最小生成树Prim算法
代码思路来自AcWingWhat is theMin spaning tree ? -----》Click this to know the answer测试样例Input:4 51 2 11 3 21 4 32 3 23 4 4Output:6The Code:#include <iostream>#include <vector>#include <cstring>using namespace std;c..原创 2022-05-08 13:36:15 · 167 阅读 · 0 评论 -
哈夫曼算法 (Huffman)-- 合并果子
哈夫曼给出了求最优树的方法,该方法的关键就是:从带权为(这里假设)的最优树T'中得到带权为的最优树比如我们要求带权 7 8 9 12 16 的最优树那么我们就要使得每个节点尽可能的小这样求出来的节点的就会尽可能的小所以我们可以重复执行如下操作:排序数组 取出数组的前两个数相加 将相加后得到的数放回数组即可得到最小的节点值例如刚刚的数据我们模拟一边可得//第一次 : 7 8 9 12 16 ( 7 + 8 ) --> 9 12 15 16//第二次 :9 12 1原创 2022-04-01 22:52:18 · 793 阅读 · 0 评论