
板子
各种算法板子
番茄元
东方欲晓,莫道君行早。
展开
-
H - Cow Contest POJ - 3660(Floyd 传递闭包)
H - Cow Contest POJ - 3660题意: 有 n 头牛比赛,边 1 -> 2 代表 1 能赢 2 ,给你 m 条边,问能确定出多少头牛的名次?思路: 如果 1->2 && 2 ->3 则显然有 1->3 ,所以该关系满足传递关系,则我们可以利用 Floyd 求传递闭包,最后出度 + 入度为 n-1 的点,名次必然确定复杂度:O(n3)= 1e6AC代码#include<iostream>#include<cstrin原创 2021-08-28 10:34:59 · 127 阅读 · 0 评论 -
D - Silver Cow Party POJ - 3268
D - Silver Cow Party POJ - 3268dijkstra 是 O(n2),堆优化一下, O(nlogn)对每个点跑一次 dj, 取 max(dis(x->i)+dis(i->x))总复杂度 O(n2logn) = 1e7#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<queue>#in原创 2021-08-25 21:46:55 · 100 阅读 · 0 评论 -
最短路专题(不完整)
参考文章单源最短路Dijkstra(堆优化)DJ 的思想是每次从剩下的边中贪心的取最短的一条O(n^2)因为复杂度主要由边决定,适合稀疏图不能处理负边权每次取一个点做未中转点,遍历其所有相邻点,看经过该中转点能否让距离更短,可以的话,更新距离,更新前驱点为中转点。利用堆优化,取出最短的一条O(nlogn)模板#include<cstdio>#include<iostream>#include<algorithm>#include<queu原创 2021-08-14 08:05:03 · 120 阅读 · 0 评论 -
I - Arbitrage POJ - 2240
I - Arbitrage POJ - 2240题意: 利用汇率之间的差价判断是否可以赚钱思路: 利用 spfa 跑最长路(即松弛条件改为取更大的值),判断是否存在正环,存在则可以赚钱#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<queue>#include<vector&原创 2021-08-28 11:32:45 · 71 阅读 · 0 评论 -
K - Candies POJ - 3159(利用了自定义比较操作符)
K - Candies POJ - 3159题意: 孩子 A 觉得 B 得到的糖果不能比自己多超过 c,求 n 比 1 最多能多几颗糖果思路:DJ,松弛条件: sweet[A] > sweet[B] + c 时不满足条件#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<vector>using namespace std;原创 2021-08-28 16:41:24 · 100 阅读 · 0 评论 -
S - Extended Traffic LightOJ - 1074
S - Extended Traffic LightOJ - 1074题意: 每个点有一个点权,边权为边的(终点点权-起点点权)的立方, 求从 1 出发的最短路思路一:DJ,太简单了结果一发WA了,妙啊,记得考虑负边权,可能有负环#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespa原创 2021-09-02 17:35:38 · 88 阅读 · 0 评论 -
G - MPI Maelstrom POJ - 1502
G - MPI Maelstrom POJ - 1502思路: 乍一看,我觉得使求一棵最小生成树,然后找到从根节点到叶节点的最长的一条转念一想,这不就直接是从起点到各个点的最短路中最长的一条即可,直接转化为 DJ 板子题#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<algorithm>using namespace std;原创 2021-08-27 22:55:26 · 110 阅读 · 0 评论 -
J - Invitation Cards POJ - 1511
J - Invitation Cards POJ - 1511题意: 共有 n 个站点,n 个志愿者从1 出发,分别到达不同的站点,晚上全部回到 1 ,求他们总的最小花费是多少?思路: 首先想到从 1 出发跑一遍 DJ, 然后再以每一个点为起点出发跑 n-1 遍 DJ ,求出所有 dis[1] + dis2[i] 即可,但是看了一下复杂度, n <= 1e6, 炸了优化一下,从 1 出发跑一边 DJ 后,反向建图,然后再从 1 出发跑一遍,答案就有了复杂度:O(2*nlogn)=4e7在原创 2021-08-28 15:47:38 · 75 阅读 · 0 评论 -
I - Arbitrage POJ - 2240
I - Arbitrage POJ - 2240题意: 利用汇率之间的差价判断是否可以赚钱思路: 利用 spfa 跑最长路(即松弛条件改为取更大的值),判断是否存在正环,存在则可以赚钱#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>#include<queue>#include<vector&原创 2021-08-28 15:48:26 · 119 阅读 · 0 评论 -
N - Tram POJ - 1847
N - Tram POJ - 1847题意: 从一个点出发,可以到达若干个点,到第一个点的边权为0,到其他点的边权为1,到不了为 inf ,求从起点到终点的最短路。#include<iostream>#include<cstdio>#include<cstring>#include<queue>#include<vector>using namespace std;const int maxn = 110;const int原创 2021-08-31 09:31:46 · 91 阅读 · 0 评论 -
B - Frogger POJ - 2253
B - Frogger POJ - 2253题意: 从 1 号点出发,找每一条能够到达 2 号点的路径,每条路径的答案是该路径中相邻两点之间距离的最大值,求这些答案中的最小值。思路: 感觉不是最短路,是不是用二分查找呢,但是又要遍历每一条路径,那就直接套用最短路的思想,从第 1 号点出发,贪心的求出其能够到达的点的最小距离,走到这一点(此时一定是路径上最大距离的最小值),再用这个距离更新没有被访问过的每一个点的路径答案(路径最大跨度为当前点的最大跨度与当前点到各个点的距离中的较大者),直到所有的点原创 2021-08-24 11:19:08 · 71 阅读 · 0 评论 -
L - Subway POJ - 2502
L - Subway POJ - 2502题意: 从 家出发步行与坐 subway 交替进行,问最小的时间花费,最终四舍五入答案为 整数存图难四舍五入:double bint a = b + 0.5;printf("%.0f", b);#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#includ原创 2021-08-28 20:06:52 · 98 阅读 · 0 评论 -
A - Til the Cows Come Home POJ - 2387
A - Til the Cows Come Home POJ - 2387最短路#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int maxn = 2010;typedef pair<int, int> PII; // first 存距离 s原创 2021-08-24 09:41:09 · 111 阅读 · 0 评论 -
R - 0 or 1 HDU - 4370
R - 0 or 1 HDU - 4370题意: 给你一个邻接矩阵,让你求出从满足条件的答案, 条件如下:1 的出度为 1, 入度不一定n 的入度为 1, 出度不一定其余点的 出度 == 入度,即 当1) in = out = 0 时, ans = dis[n]2) in = out >= 1, 总能从1出发,沿原路或其他路返回1,即有一条欧拉回路,同理有从 n 出发的一个环, ans = min_circle_dis[1] + min_circle_dis[n];#includ原创 2021-09-02 16:36:46 · 72 阅读 · 0 评论 -
O - Layout POJ - 3169(差分约束)
O - Layout POJ - 3169参考思路: 限制条件 : 最大距离不超过w d[v] - d[u] <= w; 最小距离超过w d[v] - d[u] >= w;移项得 d[v] <= d[u] + w; d[u] <= d[v] + (-w);即加边为 add(u, v, w); add(v, u, -w)用 spfa 跑最短路,如果结果为inf, 则距离无限大,如果出现负环,则结果不存在AC代码#include<iostream>#原创 2021-09-01 19:38:24 · 142 阅读 · 0 评论 -
Djkastra堆(手写堆)优化版
直接上代码代码中的注释掉的部分为C++优先队列实现#include<cstdio>#include<cstdlib> #include<iostream>#include<algorithm>#include<queue>#include<cstring> using namespace std;typedef pair<int,int> PII; // first 存距离 second 存编号 co原创 2021-11-08 21:36:15 · 599 阅读 · 0 评论 -
C - Heavy Transportation POJ - 1797
C - Heavy Transportation POJ - 1797求从1~n的最大载货量#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int maxn = 1010;int n, m;int G[maxn][maxn];bool vis[maxn];int dis[maxn];void dijkstra() { dis[1] =原创 2021-08-25 21:09:16 · 108 阅读 · 0 评论 -
P - The Shortest Path in Nya Graph HDU - 4725
P - The Shortest Path in Nya Graph HDU - 4725最短路不是 每两个点之间按层数设置边权 + 额外边权 TLE是 相邻两层之间设置边权 + 额外边权需注意 add 添加得是点的关系而不是层得关系以下加边得方法 TLE 了,应该是因为太多重复加边, 如 2 1-2 2-1 ; 1 1-2 map<int, int> mp; scanf("%d%d%d", &N, &M, &C); for(in原创 2021-09-01 21:35:32 · 72 阅读 · 0 评论 -
C - Heavy Transportation POJ - 1797
C - Heavy Transportation POJ - 1797原创 2021-08-28 15:49:39 · 71 阅读 · 0 评论 -
二分查找与二叉排序树
文章目录二分查找与二叉排序树二分查找1. 二分查找2. 区间查找3. 旋转数组二分查找与二叉排序树二分查找1. 二分查找将 target 插入有序数组中,要求插入后数组仍然有序,返回插入位置的下标int search(vector<int> &nums, int target) { int index = -1; int begin = 0; int end = nums.size()-1; while(index == -1) { int mid = begin原创 2021-09-11 20:57:07 · 586 阅读 · 0 评论 -
二叉树(构造与遍历方法)
文章目录二叉树一、二叉树的构造二、二叉树的深度遍历1. 前序遍历2. 中序遍历3. 后序遍历二叉树一、二叉树的构造#include<cstdio>using namespace std;struct TreeNode{ int val; TreeNode *left, *right; // 左右子树 TreeNode (int x) : val(x), left(NULL), right(NULL) {}};void preorder_print(TreeNode *原创 2021-09-11 10:06:01 · 179 阅读 · 0 评论 -
手写堆模板(指针数组)
文章目录使用说明1.插入式建堆2.直接在数组基础上调整排序建堆使用说明本文的堆以小根堆为例,给出模板使用时将ElementType 修改为对应的数据类型就好1.插入式建堆建一个空堆,将元素一个一个插入,调整#include <cstdio>#include <cstdlib>using namespace std;typedef struct HeapStruct { ElementType *Element; int Size; int MaxSiz原创 2021-11-08 21:33:51 · 191 阅读 · 0 评论 -
并查集专题
文章目录并查集一、查找:二、合并:三、按秩合并(又叫启发式合并)并查集是一种树形数据结构,可用于 合并 和 查询合并(Union):确定某个元素位于哪个子集查询(Find):合并两个子集为一个集合一、查找:int find(int x) { if(x == fa[x]) return x; else return fa[x] = find(fa[x]);} 二、合并:void Union(int x, int y) { x = find(x); y = find(y);原创 2021-09-02 21:38:24 · 99 阅读 · 0 评论 -
A - Wireless Network POJ - 2236
A - Wireless Network POJ - 2236并查集if (op == 'S') { scanf("%d%d", &u, &v); if(vis[u] && vis[v] && find(u) == find(v)) printf("SUCCESS\n"); else printf("FAIL\n");}#include<iostream>#include<cstdio>#include<c原创 2021-09-02 22:15:27 · 74 阅读 · 0 评论 -
B - The Suspects POJ - 1611
B - The Suspects POJ - 1611基并查集#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 3e4+100;int n, m;int fa[maxn], cnt[maxn];void init() { memset(cnt, 0, sizeof(cnt原创 2021-09-03 10:40:57 · 80 阅读 · 0 评论 -
C - 食物链 POJ - 1182
C - 食物链 POJ - 1182大佬,%%%加入给你一个 1, 那 1 应该放进 A、B、还是C呢,不知道了,所以开三倍的空间, 1~n 表示 A, n+1~2n 表示 B, 2n+1 ~ 3*n 表示 C我以为路径压缩了就可以用 fa[i] 代替 find(i) 了,实际上,这是不对的,修改的过程中,可能会跳过一些点,所以想要 fa[i] = find(i), 必须把所有元素 find 一遍才能实现AC 代码#include<cstdio>#include<cst原创 2021-09-03 11:52:38 · 182 阅读 · 0 评论 -
树状数组(一维)
树状数组细节树状数组: (数据量很大,WA了多考虑long long)差分:单点修改 + 区间查询单点修改和区间查:直接原数组a[i]+k 则所有包含a[i]的上层数组c[i]+k,区间查询用前缀和#130. 树状数组 1 :单点修改,区间查询#include<bits/stdc++.h>#define ll long longusing namespace std;const ll maxn = 1e6+10;ll a[maxn], c[maxn];ll n,原创 2021-08-12 12:48:21 · 94 阅读 · 0 评论 -
线段树(初步)
线段树细节要点线段树: 建立一棵二叉树,用递归建图在叶子节点处无需下放懒惰标记,所以懒惰标记可以不下传到叶子节点。下放懒惰标记可以写一个专门的函数 pushdown,从儿子节点更新当前节点也可以写一个专门的函数 maintain(或者对称地用 pushup),降低代码编写难度。标记永久化,如果确定懒惰标记不会在中途被加到溢出(即超过了该类型数据所能表示的最大范围),那么就可以将标记永久化。标记永久化可以避免下传懒惰标记,只需在进行询问时把标记的影响加到答案当中,从而降低程序常数。具体如何处理与题原创 2021-08-12 22:01:07 · 80 阅读 · 0 评论 -
ST表(初步)
ST表细节用于查询区间最大最小值,不便于进行修改模板P3865 【模板】ST 表查找区间最大值#include<bits/stdc++.h>using namespace std;const int logn = 21;const int maxn = 2e6+1;int f[maxn][logn+1], Logn[maxn+1];inline int read() { char c = getchar(); int x = 0, f = 1; while(c <原创 2021-08-12 12:41:07 · 87 阅读 · 0 评论 -
E - Aggressive cows POJ - 2456
E - Aggressive cows POJ - 2456Problem DescriptionFarmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stalls are located along a straight line at positions x1,…,xN (0 <= xi <= 1,000,000,000).His C (2 <= C <= N)原创 2021-08-28 15:50:41 · 98 阅读 · 0 评论 -
J - One-Dimensional HYSBZ - 4688
J - One-Dimensional HYSBZ - 4688Problem Description考虑一个含有 N 个细胞的一维细胞自动机。细胞从 0 到 N-1 标号。每个细胞有一个被表示成一个小于 M 的非负整数的状态。细胞的状态会在每个整数时刻发生骤变。我们定义 S(i,t) 表示第 i 个细胞在时刻 t 的状态。在时刻 t+1 的状态被表示为 S(i,t+1)=(A×S(i-1,t)+B×S(i,t)+C×S(i+1,t) ) mod M ,其中 A,B,C 是给定的非负整数。对于原创 2021-07-19 15:19:42 · 73 阅读 · 0 评论 -
I-Matrix Power Series POJ - 3233 矩阵快速幂+分治
I-Matrix Power Series POJ - 3233 矩阵快速幂+分治Problem DescriptionGiven a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 + … + Ak.InputThe input contains exactly one test case. The first line of input contains three positive integers n原创 2021-07-19 10:50:52 · 124 阅读 · 0 评论 -
H - Fibonacci POJ - 3070 (矩阵快速幂)
H - Fibonacci POJ - 3070 (矩阵快速幂)DescriptionIn the Fibonacci integer sequence, F0 = 0, F1 = 1, and Fn = Fn − 1 + Fn − 2 for n ≥ 2. For example, the first ten terms of the Fibonacci sequence are:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, …An alternative formula fo原创 2021-07-19 09:24:12 · 171 阅读 · 0 评论 -
2021-07-16
三分算法利用三分法求最值parabolic curve.(抛物线)题意下凸抛物线每一个x处的最大值的最小值(这些最大值属于一条新的下凸抛物线)个人理解:三分的区间不一定需要从中间分,只要分出三个区间,判断 l, r 大小关系即可1.while(r-l > 1e-9) { // 以求下凸最小值为例 mid1 = (l+r)/2; mid2 = (mid1+r)/2; if(f(mid1) > f(mid2)) l = mid1; else r = mid2; }原创 2021-07-16 20:12:39 · 98 阅读 · 0 评论 -
K - 233 Matrix HDU - 5015
K - 233 Matrix HDU - 5015In our daily life we often use 233 to express our feelings. Actually, we may say 2333, 23333, or 233333 … in the same meaning. And here is the question: Suppose we have a matrix called 233 matrix. In the first line, it would be 23原创 2021-07-19 16:50:24 · 68 阅读 · 0 评论 -
D - Sand Fortress CodeForces - 985D
D - Sand Fortress CodeForces - 985Dnumber of spots you can occupy so that all the aforementioned conditions hold.InputThe only line contains two integer numbers n and H (1 ≤ n, H ≤ 1018) — the number of sand packs you have and the height of the fence, r原创 2021-07-17 21:46:06 · 353 阅读 · 0 评论 -
F - Weakness and Poorness CodeForces - 578C
F - Weakness and Poorness CodeForces - 578CProblem DescriptionYou are given a sequence of n integers a1, a2, …, an.Determine a real number x such that the weakness of the sequence a1 - x, a2 - x, …, an - x is as small as possible.The weakness of a sequ原创 2021-07-18 16:56:56 · 107 阅读 · 0 评论 -
A - Expanding Rods POJ - 1905(二分)
A - Expanding Rods POJ - 1905(二分)题目Problem DescriptionWhen a thin rod of length L is heated n degrees, it expands to a new length L’=(1+n*C)*L, where C is the coefficient of heat expansion.When a thin rod is mounted on two solid walls and then heated,原创 2021-07-16 15:53:13 · 121 阅读 · 0 评论 -
C - Multiplication Table CodeForces - 448D
C - Multiplication Table CodeForces - 448D题目:Problem DescriptionBizon the Champion isn’t just charming, he also is very smart.While some of us were learning the multiplication table, Bizon the Champion had fun in his own manner. Bizon the Champion pain原创 2021-07-16 21:15:58 · 254 阅读 · 0 评论 -
G - Kolya and Tanya CodeForces - 584B
G - Kolya and Tanya CodeForces - 584BProblem DescriptionKolya loves putting gnomes at the circle table and giving them coins, and Tanya loves studying triplets of gnomes, sitting in the vertexes of an equilateral triangle.More formally, there are 3n gno原创 2021-07-18 17:42:59 · 176 阅读 · 0 评论