ACM算法
文章平均质量分 59
ColorWaterer
Orz
展开
-
ACM几何问题
今天复习了一下几何的基础内容,顺便整理了一下。其实几何也挺简单的,只要熟练掌握点积和叉积,这些都是易学易懂的。1.点、直线、线段、圆、三角形、多边形、矩形->判相交,判位置,求交点,求最近点,求特殊点(三角形六心等)2.凸包(水平序,极角序)*(规范,非规范)3.半平面交(求核)4.旋转卡壳(多边形直径、宽度,两个多边形间的最近最远距离)5.扫描线(坑)6.KD-树(坑)7.三角剖分基原创 2014-11-17 23:28:36 · 538 阅读 · 0 评论 -
巧用二分法
题意:有N个城市,每个城市有Ai个人。现在要开始投票,每个人有一张票。作为领导者,你有B个箱子,你必须要将这B个箱子分发到N个城市去,每个城市至少需要一个箱子。每个人都必须要投票,不能弃票,也就是说要把票丢进箱子里去(每个城市有Ai张票)。现在问你,怎么分配这B个箱子才能使这些所有箱子里中票数最大的那个箱子里的票最少?1思路:若每个城市都先分得一个箱子,那么目前的答案就是max(Ai(1接下来如果原创 2014-11-17 23:30:02 · 496 阅读 · 0 评论 -
重走算法之路——树状数组,线段树,张昆玮线段树(这里运行时间还体现不出彼此的区别)
http://acm.hdu.edu.cn/showproblem.php?pid=1166树状数组:265ms//#pragma comment(linker, "/STACK:61400000,61400000")#include #include #include #include #include #include #include #include #include #include #原创 2014-11-17 23:29:49 · 1482 阅读 · 0 评论 -
STL 中优先队列的使用方法(priority_queue)
1、基本操作:empty() 如果队列为空返回真pop() 删除对顶元素push() 加入一个元素size() 返回优先队列中拥有的元素个数top() 返回优先队列对顶元素在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。2、使用方法:头文件:#include 声明方法:(1) 普通方法priority_queueint> q;//通过操作,按照元素从大到小的顺序原创 2014-11-17 23:29:41 · 549 阅读 · 0 评论 -
POJ3270 置换群
给你一些没有重复的数,你只能交换其中两个数字,但是你要付出的代价是这两个数字之和。问你如何交换使得这些数字递增且代价最小。置换群的概念:这些数字将会形成几个循环体。对于每个循环体1、循环体内和 + 循环体内最小值 + 所有数内最小值 * (该循环体内数字个数 + 1)2、循环体内和 + 循环体内最小值 * (该循环体内数字个数 - 1)以上两种取最小值即可。//#pragma comment(li原创 2014-11-17 23:29:07 · 492 阅读 · 0 评论 -
求解网络流涉及的几个主要概念
1、 容量网络、残留网络、层次网络;2、 增广路、前向弧、后向弧、网络流、割;3、 弧的容量、流量;4、 距离标号、活跃顶点、盈余、推进;5、 可行流、预流、最大流、可改进量、最小割。6、 拆点、路径压缩、最短路、DFS、BFS、二分搜索。一、网络最大流1、 一般增广路算法(Generic Augmenting Path)2、 最短增广路算法(Shortest Augmenting Path)3、原创 2014-11-17 23:28:44 · 915 阅读 · 0 评论 -
最小 k 度限制生成树
所谓最小 k 度限制生成树,就是指有特殊的某一点的度不能超过k时的最小生成树。简单思想:设特殊的那点为v0,先把v0,删除,求出剩下连通图的所有最小生成树,假如有m棵最小生成树,那么这些生成树必定要跟v0点相连,也就是说这棵生成树的v0点至少是m度的。若m>k,条件不成立,无法找到最小 k 度限制生成树;若m具体步骤:1. 先求出最小 m 度限制生成树:原图中去掉和 V0 相连的所有边(可以事先存原创 2014-11-17 23:28:26 · 588 阅读 · 0 评论 -
二分图的最大匹配—匈牙利算法
【基本概念】: 二分图: 二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。 无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。 最大匹配: 给定一个二分图G,在G的一原创 2014-11-17 23:28:21 · 366 阅读 · 0 评论 -
我就是喜欢敲trie树
#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define pi 3.1415926535897932385#define LL64 __int64#d原创 2014-11-17 23:29:04 · 434 阅读 · 0 评论 -
树状数组
树状数组是个很简单就能学会的东西,我以前学会了线段树就不想去学树状数组,今天无聊学习了一下,发现好简单,耗时不到1小时。 如图为树状数组存储结构。首先是用A数组读入所有的值,然后用C数组保存树状数组的值。C[m]=sum(a[m-pow(2, k)+1],...a[m])=(m所管辖范围之和)。我们看看上面这个公式,C数组所存的值就是其各自管辖区域的所有值和。m-pow(2, k)+1就是管辖区域原创 2014-11-17 23:28:59 · 410 阅读 · 0 评论 -
容斥原理
n个集合的并 = (n - 1)个集合的并 ∪ 第n个集合。所有集合的并 = 所有奇数个集合的交 - 所有偶数个集合的交。原创 2014-11-17 23:28:56 · 326 阅读 · 0 评论 -
网络流Edmond-Karp算法
前阵子都在忙PHP的事,没有时间去更新博客,今天下午终于狠下心来学网络流,在这里讲一下网络流Edmond-Karp算法的基础内容。至于网络流的一些基础概念,这里就不说明了,大家可以去百度或看书。其思想是不断通过BFS寻找一条增广路,直到残留网络中不再存在增广路为止。对于每次找到一条增广路,我们需要知道两条信息。1、该增广路的最大流量(可以定义一个变量来求得)。2、该增广路的路径(可以定义一个数组来原创 2014-11-17 23:28:41 · 1116 阅读 · 0 评论 -
福利来了:几何——二维凸包
继上次ACM几何问题,这次在这里讲一下凸包,作为给大一努力的礼物。凸包即为一个最小凸多边形满足所有的点都在其内或其边上。下面将讲述Andrew的算法,其比Graham算法更快更稳定。对于输入的点p,先按照x从小到大排序(如果x相同,按照y从小到大排序)。然后进行两次扫描,第一次从左到右,第二次从右到左,每次扫描时间复杂度为O(n),排序为O(nlogn)。第一次扫描:先将前面的两个点加入,第一个点原创 2014-11-17 23:28:39 · 647 阅读 · 0 评论 -
B+*树
B树:多路搜索树,每个结点存储M/2到M个关键字,非叶子结点存储指向关键字范围的子结点(M:一个节点的子节点数); 所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中; B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中; B*树:在B+树基础上,为非叶子结点也原创 2014-11-17 23:30:16 · 364 阅读 · 0 评论