ACM模板
成龙大侠
这个作者很懒,什么都没留下…
展开
-
快速幂模板(求末尾数字)
#include <stdio.h>int powmod( int x, int c );int main(){ int number; /*做幂运算的数*/ int c; /*要用来取余的数*/ scanf("%d%d", &number, &c ); printf("%d\n", powmod( nu...原创 2018-04-14 15:52:12 · 284 阅读 · 0 评论 -
记不清这是第多少次总结最短路问题了
记不清这是第多少次总结最短路问题了,不过每次总结也都能有新的收获吧。这次是总结当作模板使用的。Bellman算法:维护一个数组,记录从起点到其他点的距离,不断通过可能的路径来更新数组,直到遍历了所有的路径,从而找到最小值。// 最短路 Bellman-Ford 算法#include <bits/stdc++.h>using namespace std;cons...原创 2019-07-25 20:01:43 · 134 阅读 · 0 评论 -
最小生成树 Kruskal算法
预备知识:并查集,参考我的博客https://blog.csdn.net/hpu2022/article/details/81710828这里再给出一种并查集的写法:const int MAXN = (int) 1e6+7;int pre[MAXN];void init(int n){ for(int i=0; i<n; i++) pre[i] ...原创 2019-03-14 20:21:14 · 623 阅读 · 0 评论 -
最小生成树 Prim算法
Prim算法是从某个顶点出发,然后不断添加边的算法。首先,我们假设有一颗只包含一个顶点v的树T。然后贪心地选取T和其他顶之间相连的最小权值的边,并把它加到T中。不断进行这个操作,就可以得到一颗生成树了。这样得到的就是最小生成树。code:#include <cstdio>#include <algorithm>using namespace std;c...原创 2019-03-14 19:15:10 · 444 阅读 · 0 评论 -
图论:树的直径(邻接表+bfs,模板)
树的直径求法,两边bfs,从任意一个点出发求出最长距离的终点,然后再从终点出发求出新的最长路,就是树的直径了。#include <bits/stdc++.h>using namespace std;const int N = 10010;typedef pair<int, int> P; // first是下一个点,second是从当前点到下一个点的距离...原创 2019-08-08 09:53:40 · 283 阅读 · 0 评论 -
图论:最近公共祖先(LCA, Tarjan算法,模板)
关于Tarjan算法的讲解:https://www.cnblogs.com/JVxie/p/4854719.html重点:下面详细介绍一下Tarjan算法的基本思路:1.任选一个点为根节点,从根节点开始。2.遍历该点u所有子节点v,并标记这些子节点v已被访问过。3.若是v还有子节点,返回2,否则下一步。4.合并v到u上。5.寻找与当前点u有询问关系的点v。6.若是v...原创 2019-08-08 19:18:48 · 332 阅读 · 0 评论 -
最短路:二维矩阵中的路径还原(POJ 3984 迷宫问题)
定义一个二维数组:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。Input一个5 ×...原创 2019-08-14 10:19:16 · 439 阅读 · 0 评论 -
图论:拓扑排序(邻接矩阵,邻接表,优先队列,模板)
基于邻接矩阵实现的拓扑排序:#include <bits/stdc++.h>#include <cstdio>using namespace std;const int N = 110;int mp[N][N];int vis[N];int n, m;void topo_sort(){ for(int i=1; i <= n; i+...原创 2019-08-07 19:40:23 · 408 阅读 · 0 评论 -
最短路:路径还原(dijkstra,模板)
B. wzy的大冒险——出发咯QAQ单点时限:2.0 sec内存限制:512 MBwzy踏上了冒险的旅程。现在他从地精手里买了一份地图,地图上有n个城镇。他从第一个城镇出发,走向(没钱只能走)第n个城镇,现在,请你帮wzy找到一条最短的路径,并倒序(从n到1)输出一条最短路径。举个栗子:如果有两条路径6431和6521,我们选择6431这条。地精小提示:路...原创 2019-08-12 16:04:37 · 289 阅读 · 0 评论 -
数据结构:线段树(模板)
关于线段树我之前就写过博客也转载过他人的博客来介绍线段树。递归版线段树:https://blog.csdn.net/hpu2022/article/details/81946151非递归版线段树:https://blog.csdn.net/hpu2022/article/details/81946200我自己以前写过的线段树模板:https://blog.csdn.net/hpu202...原创 2019-07-30 19:41:40 · 323 阅读 · 0 评论 -
模式匹配:KMP算法(模板)
关于KMP算法讲解:https://blog.csdn.net/v_july_v/article/details/7041827这里只当作模板使用#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 10010;ch...原创 2019-07-30 11:03:00 · 190 阅读 · 0 评论 -
HDU2065 "红色病毒"问题(矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2065题意:中文题,不再描述。分析:参考这篇博客,写的非常好,我也是看的的。https://blog.csdn.net/idealism_xxm/article/details/51612355个人理解:我把原文的状态转移方程又补充了一下。为0是因为下一个状态不能由当...原创 2019-07-26 18:48:38 · 193 阅读 · 0 评论 -
约瑟夫环
题目:N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。例如:N = 3,K = 2。2号先出列,然后是1号,最后剩下的是3号。Input2个数N和K,表示N个人,数到K出列。(2 <= N, K <= 10^6)Output最后剩下的人的编号Sample Input3 2S...原创 2018-05-15 09:26:19 · 113 阅读 · 0 评论 -
杨辉三角求组合数
我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分。例如, 如果代码中出现 for(i=1;i<=n;i++) OP ; 那么做了n次OP运算,如果代码中出现 fori=1;i<=n; i++) for(j=i+1;j<=n; j++) OP; 那么做了n*(n-1)/2 次OP 操作。 现在给你已知有m层for循环操作,且每次for中变量的起始值是上一个...原创 2018-06-04 18:05:10 · 3224 阅读 · 0 评论 -
BFS实例超详细讲解
实例参考挑战程序设计BFS的迷宫最短路径#include <bits/stdc++.h>#define MAXN 100using namespace std;const int INF = 100000000;typedef pair<int, int> P; // 定义一个pair类型的数据结构char maze[MAXN][MAXN+1]; //定义一个保...原创 2018-06-17 17:56:45 · 1818 阅读 · 0 评论 -
最短路和差分约束(三种算法实现)( Til the Cows Come Home )
题目训练链接(密码hpuacm): https://vjudge.net/contest/246705我会分别用 迪杰斯特拉 优先队列和链式前向星优化过的迪杰斯特拉 SPFA算法 三种方法讲一下例题。此外上述三种算法是求单源最短路问题, 这里还会介绍一下多源最短路的算法 floyd算法。多源最短路可以求出任意两点间的最短距离。在存图方式中会用到邻接矩阵 链式前向星等存图方式,不知道...原创 2018-08-14 21:10:26 · 2488 阅读 · 0 评论 -
并查集((还是)畅通工程 )(The Suspects )(Ubiquitous Religions )
题目训练网址: https://vjudge.net/contest/247051 并查集是一种树型的数据结构,用于处理一些不相交集合 (Disjoint Sets)的合并及查询问题。常常在使用中以森林来 表示。集就是让每个元素构成一个单元素的集合,也就是按 一定顺序将属于同一组的元素所在的集合合并。。 在一些有N个元素的集合应用问题中,我们通常是在开始...原创 2018-08-15 21:12:54 · 370 阅读 · 0 评论 -
动态规划之背包问题(待完善)
题目训练(密码hpuacm):https://vjudge.net/contest/244922背包问题有 部分背包 01背包 完全背包 多重背包部分背包是一种可分割的背包,就是一个背包我们可以只取它的部分。那么给出一组物品的价值和重量,怎么选才能让背包装的价值最大呢?很简单,选性价比最高的,即优先选择的是单位重量价值(v[i] / w[i])最高的那个。01背包就很熟悉了,就是给出一...原创 2018-08-08 22:17:36 · 231 阅读 · 0 评论 -
快速幂 A的B次方mod上C
#include <stdio.h>typedef long long LL;LL pow_mod(LL a, LL n, LL MOD){ LL res = 1; while (n) { if(n&1) //当前n的二进制的最后一位为1,即此时的n为奇数 res = res * a % MOD; a = a * a % MOD; //相当于ba...原创 2018-07-19 15:46:15 · 1166 阅读 · 0 评论 -
拓补排序+树的直径
训练题目网址(密码hpuacm2017): https://vjudge.net/contest/244053 记好下面的模板#include <bits/stdc++.h>using namespace std;const int MAXN = 1000+10;int ma[MAXN][MAXN];int vis[MAXN];int n, m;void...原创 2018-08-05 09:26:07 · 185 阅读 · 0 评论 -
POJ 2559 Largest Rectangle in a Histogram(单调栈)
题目链接:https://vjudge.net/problem/POJ-2559题意:如图所示,求最大的连续阴影面积思路:首先我们肯定时可以暴力判断,找出每一个最大的向右扩展程度和向左扩展程度,然后求面积,最后再求个最大值,不过这样肯定会超时,不是一个好的解法。这样我们就要想一个更有效的方法了,首先一个一个的判断会有很多的重复计算,如何避免掉这些重复的计算呢?假设现在又一组...原创 2019-09-28 14:30:49 · 116 阅读 · 0 评论