随笔分类 -  算法

分享必须掌握的高频算法
摘要:结构体排序: #include <iostream> #include <string> #include <algorithm> using namespace std; typedef struct student { string name; int achievement; }student 阅读全文
posted @ 2021-09-07 17:05 JK~ 阅读(47) 评论(0) 推荐(0)
摘要:#include <cstring> #include <iostream> using namespace std; const int N = 200003, null = 0x3f3f3f3f; int h[N]; int find(int x) { int k = (x % N + N) % 阅读全文
posted @ 2021-08-11 14:51 JK~ 阅读(122) 评论(0) 推荐(0)
摘要:模拟散列表 维护一个集合,支持如下几种操作: I x,插入一个数 x; Q x,询问数 x 是否在集合中出现过; 现在要进行 N 次操作,对于每个询问操作输出对应的结果。 输入格式 第一行包含整数 N,表示操作数量。 接下来 N 行,每行包含一个操作指令,操作指令为 I x,Q x 中的一种。 输出 阅读全文
posted @ 2021-08-11 14:24 JK~ 阅读(46) 评论(0) 推荐(0)
摘要:有向图的拓扑序列 给定一个 n个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。 请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。 若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y) x 在 A 中都出现在 y 之前,则称 A 是该图的一个 阅读全文
posted @ 2021-08-03 17:41 JK~ 阅读(453) 评论(0) 推荐(0)
摘要:题目描述 小K 喜欢翻看洛谷博客获取知识。每篇文章可能会有若干个(也有可能没有)参考文献的链接指向别的博客文章。小K 求知欲旺盛,如果他看了某篇文章,那么他一定会去看这篇文章的参考文献(如果他之前已经看过这篇参考文献的话就不用再看它了)。 假设洛谷博客里面一共有 n(n ⇐ 105) 篇文章(编号为 阅读全文
posted @ 2021-08-02 14:27 JK~ 阅读(121) 评论(0) 推荐(0)
摘要:二分图的最大匹配 给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。 数据保证任意一条边的两个端点都不可能在同一部分中。 请你求出二分图的最大匹配数。 二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边 阅读全文
posted @ 2021-07-31 21:41 JK~ 阅读(148) 评论(0) 推荐(0)
摘要:染色法判定二分图 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。 请你判断这个图是否是二分图。 输入格式 第一行包含两个整数 n 和 m。 接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。 输出格式 如果给定图是二分图,则输出 Yes,否则输出 N 阅读全文
posted @ 2021-07-31 20:47 JK~ 阅读(75) 评论(0) 推荐(0)
摘要:Kruskal算法求最小生成树 给定一个 nn 个点 mm 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。 给定一张边带权的无向图 G=(V,E)G=(V,E),其中 VV 表示图中点的集合,EE 表示图中边的集 阅读全文
posted @ 2021-07-31 14:39 JK~ 阅读(142) 评论(0) 推荐(0)
摘要:Prim算法求最小生成树 给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。 求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。 给定一张边带权的无向图 G=(V,E) 其中 V 表示图中点的集合,E表示图中边的集合,n=|V|, m=|E| 阅读全文
posted @ 2021-07-31 13:52 JK~ 阅读(121) 评论(0) 推荐(0)
摘要:#####深度优先的应用 树的重心 给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。 请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。 重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。 输入 阅读全文
posted @ 2021-07-31 11:36 JK~ 阅读(202) 评论(0) 推荐(0)
摘要:Floyd求最短路 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。 再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。 数据保证图中不存在负权回路。 输入格式 第一行包含三个整数 阅读全文
posted @ 2021-07-30 16:58 JK~ 阅读(67) 评论(0) 推荐(0)
摘要:常见的图论算法 阅读全文
posted @ 2021-07-29 19:29 JK~ 阅读(35) 评论(0) 推荐(0)
摘要:spfa判断负环 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你判断图中是否存在负权回路。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整数 x,y,z表示存在一条从点 x 到点 y 的有向边,边长为 z。 输出格式 如果图中存在负权回路 阅读全文
posted @ 2021-07-29 19:26 JK~ 阅读(55) 评论(0) 推荐(0)
摘要:spfa求最短路 比较常用 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。 数据保证不存在负权回路。 输入格式 第一行包含整数 n 和 m。 接下来 m 行 阅读全文
posted @ 2021-07-29 11:53 JK~ 阅读(38) 评论(0) 推荐(0)
摘要:常用于解决存在负权边和环的问题,还可以用于有边数限制的问题中 有边数限制的最短路 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。 请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n 号点,输出 impossible。 注意: 阅读全文
posted @ 2021-07-28 15:52 JK~ 阅读(40) 评论(0) 推荐(0)
摘要:稀疏图 Dijkstra求最短路 II 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n号点,则输出 −1。 输入格式 第一行包含整数 n 和 m。 接下来 m 行每行包含三个整数 x,y,z表 阅读全文
posted @ 2021-07-28 11:38 JK~ 阅读(35) 评论(0) 推荐(0)
摘要:#####Dijkstra算法 朴素版dijkstra边数多,属于稠密图用邻接矩阵来存 Dijkstra求最短路 I 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值。 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。 输入格 阅读全文
posted @ 2021-07-22 18:08 JK~ 阅读(69) 评论(0) 推荐(0)
摘要:#include<bits/stdc++.h> //万能头文件 using namespace std; //C = A * B vector<int> mul(vector<int> &A, int b) { vector<int> C; int t = 0; //进位 //为了防止A结束之后t 阅读全文
posted @ 2021-07-22 16:24 JK~ 阅读(50) 评论(0) 推荐(0)
摘要:#include <iostream> #include <vector> using namespace std; //A / b, 商是C,余数是r vector<int> div(vector<int>& A, int b, int& r) { vector<int> C; r = 0; fo 阅读全文
posted @ 2021-07-22 16:23 JK~ 阅读(61) 评论(0) 推荐(0)
摘要:线性同余方程 给定 n 组数据 ai,bi,mi对于每组数求出一个 xi,使其满足 ai×xi≡bi(modmi),如果无解则输出 impossible。 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一组数据 ai,bi,mi。 输出格式 输出共 n 行,每组数据输出一个整数表示一个满足 阅读全文
posted @ 2021-07-22 10:48 JK~ 阅读(58) 评论(0) 推荐(0)