模板总汇
文章平均质量分 62
青竹梦
在你没有尽全力之前,永远不知道最强的自己有多强!!!
展开
-
二分图
二分图概念 顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集。无向图G为二分图的充分必要条件 G至少有两个顶点,且其所有回路的长度均为偶数。最大匹配 给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配.选择这样的边数最大的子集称为图的最大匹配问题.最小覆盖 最小覆盖要原创 2013-07-26 00:30:00 · 1490 阅读 · 0 评论 -
usaco-3.1-PROB Shaping Regions-漂浮法
漂浮法,顾名思义,就是一块块的往上飘。以逆序来进行放置,即n to 1。逆序的好处在于放置一个矩形后,俯视看到的就是最终俯视该矩形应该看到的。因为挡着它的矩形在之前已经放置好了,所以可直接统计,为递归创造了条件。每放一个矩形,可以想象成将其扔入一密度很大的海水底部,海分成了n层,然后矩形开始向上浮。在上浮过程中若碰撞到其他的矩形则断裂成几个小矩形,继续上浮,直到浮出水面。于是想到用个递归来模拟原创 2014-04-30 14:33:56 · 1473 阅读 · 0 评论 -
usaco-3.1-Humble Numbers-<set的使用>
题目到是不难,主要是用了set,方便。/*ID: rowanha3LANG: C++TASK: humble*/#includeusing namespace std;#define LL long longsetse;set::iterator it;LL num[111];int main(){ freopen("humble.in","r",stdin)原创 2014-03-21 17:12:45 · 1198 阅读 · 0 评论 -
矩阵十大经典题目之三-POJ-3233-Matrix Power Series-两次二分
如果k为偶数,那么(A+A^2+....A^K) = (A+...+A^K/2)+A^K/2*(A+...+A^K/2) 如果k为奇数,那么(A+A^2+....A^K) = (A+...+A^K/2)+A^K/2*(A+...+A^K/2)+A^k然后二分求解即可。思路简单。接下来说一下优化的问题:-------------------------------原创 2014-03-11 16:48:02 · 4108 阅读 · 2 评论 -
排列与组合专项公式
1,错排公式D(n) = (n-1) [D(n-2) + D(n-1)]2,组合公式C(n,k) = C(n-1,k) + C(n-1,k-1)3,把n个相同的豆子放在k个不同的碗里,有几种放法。假如xi代表第i个碗里有xi个豆子。x1+x2+x3+....+xk=n;(xi>=0)x1'+x2'+x3'+....+xk'=n+k(xi'=xi+1,xi>=原创 2014-02-28 09:18:21 · 1243 阅读 · 0 评论 -
poj-1659-Frogs' Neighborhood-havel定理
给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。可图化的判定:d1+d2+……dn=0(mod 2)。关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环。可简单图化的判定(Havel定理):把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d原创 2014-04-09 19:43:20 · 893 阅读 · 0 评论 -
双连通分量-tarjan
点双连通分量:在无向连通图中,如果删除该图的任何一个结点都不能改变该图的连通性,则该图为双连通的无向图。一个连通的无向图是双连通的,当且仅当它没有关键点.强连通分量:在有向图G中,如果两个顶点vi,vj间(vi路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量。tarj原创 2013-08-06 09:34:16 · 1595 阅读 · 1 评论 -
wikioi-1296-营业额统计-----------学习splay tree模版题
学习splay tree的模版题。网址:http://www.wikioi.com/problem/1296/#include#include#include#includeusing namespace std;#define maxn 110000#define INF 99999999struct splaytree//封装伸展树{ //maxn:伸展树的点的原创 2014-04-24 21:24:30 · 1980 阅读 · 4 评论 -
HDU 2222-Keywords Search-AC自动机模版题
纯粹的模版。。。学习模版总会是一个快乐的过程。。。。#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;const int原创 2014-05-14 15:11:06 · 855 阅读 · 0 评论 -
斐波那契数列的性质
fibonacci数列的性质:1.gcd(fib(n),fib(m))=fib(gcd(n,m))证明:可以通过反证法先证fibonacci数列的任意相邻两项一定互素,然后可证n>m时gcd(fib(n),fib(m))=gcd(fib(n-m),fib(m)),递归可求gcd(fib(n),fib(m))=gcd(fib(k),fib(l)),最后k=l,不然继续递归。K原创 2014-03-06 18:40:57 · 3491 阅读 · 0 评论 -
hdu-4418-Time travel-高斯+概率dp
把N个点先转化为2*N-2个点。比如说把012345转化成0123454321。这样,就可以找出任意两两个点之间的关系。然后根据关系可以得出来一个一元多项式的矩阵。然后就用高斯消元求出矩阵即可。#include#include#include#include#include#includeusing namespace std;#define eps 1e-6#原创 2014-06-24 23:35:04 · 1744 阅读 · 0 评论 -
FZU-1493-ElGamal数字签名-A^X=B(%C)求x
求A^x=B(%C)x = i * m + j ( 0原创 2014-08-08 10:55:56 · 1298 阅读 · 0 评论 -
poj-2187-凸包-旋转卡壳法求直径
先求出凸包,时间复杂度O(n)然后运用旋转卡壳发求出凸包的直径。旋转卡壳法:1.先求出y坐标最大的点为maxx,y最小的点为minn。2.过minn,maxx点做一条平行于x轴的直线3.俩直线分别对minn,maxx点逆时针旋转至某一条直线与凸包的某个点相交为止。4,用交点更新前一个点。5,重复3-4直至目前两点都出现过为止。6,每次旋转之后得到的两点之间的距离的最原创 2014-01-06 13:33:56 · 2074 阅读 · 2 评论 -
hdu-携程复赛-最短路径的代价-抠图+最小割
被数据范围坑死了。。。说好的m把所有最短路涉及到的边抠出来。然后建图,边的权值为边的c。然后对图求一个最小割。最小割割掉的所有的边即为要选调的边。#include #include #include #include #includeusing namespace std;#define INF 99999999const int maxn =1110;co原创 2014-04-14 21:00:31 · 1535 阅读 · 0 评论 -
树状数组
概念:树状数组是一个查询和修改复杂度都为log(n)的数据结构结构:c【8】=a1+a2+a3。。。。a8。即:C[i]表示A[i-2^k+1]到A[i]的和。8的二进制1000,三个0,k就等于3.那么用计算机怎么求K呢?可以用计算机的特性:int lowbit(int x){ return x&(-x);}输入x,输出2^k。比如说输原创 2013-07-29 14:43:22 · 932 阅读 · 0 评论 -
kmp中next和nextval的区别
模式匹配。kmp中next数组表示如果当前匹配不成功,匹配串移动到的位置,不考虑移动到的位置的数与当前位置数的关系。kmp中nextval数组表示如果当前匹配不成功,匹配串移动到的位置,考虑移动到的位置的数与当前位置数的关系。求next while(i<len) { if(j==-1||str[i]==str[j]) {原创 2014-02-11 10:44:08 · 13294 阅读 · 0 评论 -
拓扑排序
拓扑排序是用于图的算法的一种。适用于对于一些有偏序关系的图。比如说比赛排名,大学课堂选修之类的。要求昨完某件事情才能做另一件事情,输出做事情的次序。在一个图中。确定好次序关系后。入度为0的那个点必代表着最先需要做的事情。然后输出这个点。再把这个点出度指向的地方全部入度减一。就这样一直下去,知道全部输出结束。 hdu 1285 #include#includein原创 2012-08-02 20:32:30 · 610 阅读 · 0 评论 -
模版-最长曼哈顿距离
只考虑二维空间上两个坐标之间的曼哈顿距离(x1, y1) 和 (x2, y2),|x1-x2| +|y1-y2|去掉绝对值符号后共有下列四种情况(x1-x2) + (y1-y2), (x1-x2) + (y2-y1), (x2-x1) + (y1-y2), (x2-x1) + (y2-y1)转化一下:(x1+y1) - (x2+y2), (x1-y1) - (x2-y2),原创 2013-08-14 20:03:18 · 1487 阅读 · 0 评论 -
模版-set使用
/*set/multiset会根据待定的排序准则,自动将元素排序。两者不同在于前者不允许元素重复,而后者允许。1) 不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,则插入新元素2) 不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数3) 元素比较动作只能用于型别相同的容器(即元素和排序准则必须相同)*原创 2013-08-14 20:14:43 · 1039 阅读 · 0 评论 -
POJ-2187-凸包
凸包的求法: 1. 在所有点中选取y坐标最小的一点H,当作基点。如果存在多个点的y坐标都为最小值,则选取x坐标最小的一点。坐标相同的点应排除。然后按照其它各点p和基点构成的向量与x轴的夹角进行排序,夹角由大至小进行顺时针扫描,反之则进行逆时针扫描。实现中无需求得夹角,只需根据向量的内积公式求出向量的模即可。以下图为例,基点为H,根据夹角由小至大排序后依次为H,K,C,D,L,F,G,E,I,原创 2012-08-16 20:30:22 · 1055 阅读 · 0 评论 -
poj-2777-线段树
被线段树虐死了。。。大体题意:有一块板子,上面的颜色都为1.然后给你以下操作:C A B C 把A-B染成CP A B 询问A-B有几种颜色。做法:区域更新线段树。#include#include#include#includeusing namespace std;#define maxn 100010struct list{ int a原创 2013-09-07 20:29:14 · 852 阅读 · 0 评论 -
rqnoj-107-Ural的鹰蛋实验-dp
详参:http://wenku.baidu.com/view/7c9de809581b6bd97f19ea72.html采用了耗时最少的解法,时间复杂度O(sqrt(n))dp[i][j] :试验i次,使用j个蛋,最高可测的楼层高度。dp[i][j]=dp[i-1][j-1]+dp[i-1][j]+1;对于dp[i][j]:假如试验第一个蛋的时候蛋碎了,那么就得用剩下的j-1个蛋,原创 2013-10-13 15:10:16 · 1621 阅读 · 0 评论 -
rqnoj-201-奥运大包围-下降子序列的个数
定理:下降子序列个数等于最长不下降子序列的长度学习定理很重要啊~~#include#include#include#includeusing namespace std;int dp[10001];int num[10001];int a[20001];int nums;int ans;void cha(int x){ if(nums==0||x>=num原创 2013-10-18 16:46:40 · 1034 阅读 · 0 评论 -
如何快速取得一个二进制状态的所有子状态
int main(){ int s; while(cin>>s) { print(s); for(int i=s; i>=0; i=(i>0?(i-1)&s:-1)) { print(i); } } return 0;}代码中的i表示的是所有s中为0,i中也为0原创 2013-11-17 15:51:14 · 1721 阅读 · 0 评论 -
poj-2195-Going Home最小费用最大流
重新切一遍最小费用最大流~~~这到题目的数据范围有问题,尽量开大就好了~~#include#include#include#include#includeusing namespace std;#define INF 999999struct list{ int u; int v; int next;}node[1000001];int num;int原创 2013-06-25 15:00:00 · 1070 阅读 · 0 评论 -
poj-2513-字典树+欧拉路+并查集
这道题目是多个数据结构的集合体,考察了字典树,欧拉路,并查集。判断一个无向图有欧拉路的标准:1,图是联通的2,图的各个节点的度,只有0个或者只有2个是为奇数个的。判断图的联通:创建并查集,如果所有的点的祖先都是同一个点的话,则为联通图。#include#include#includeusing namespace std;struct list{ int原创 2013-01-19 10:15:49 · 580 阅读 · 0 评论 -
poj-3270-Cow Sorting-置换群
参考:http://lolita-angel.diandian.com/post/2012-10-18/40040595942寻找一个自我置换群,然后求这个群的最小置换。#include #include#include#include#include#include#include#define LL long long#define maxn 20000using n原创 2013-12-28 20:43:03 · 923 阅读 · 0 评论 -
自由树转化为有根树
#include#include#include#include#include#include#include#includeusing namespace std;vectorold[1001];vectornow[1001];int vis[1001];void change(int x){ int i; vis[x]=1; for(i=0;原创 2013-12-23 15:05:06 · 1885 阅读 · 0 评论 -
多叉树转二叉树
将多叉树转为二叉树:#include#include#include#includeusing namespace std;struct list{ int l; int r;}node[2001];void init(){ int i; scanf("%d%d",&n,&m); memset(vis,-1,sizeof(vis));原创 2014-02-24 09:05:17 · 3989 阅读 · 2 评论 -
二进制的简单运用
把右边连续的1变为0 ---------> x&(x+1)把右边连续的0变为1---------->x | (x- 1) 取右边连续的1------------------>(x^(x+1))>>1 去掉右边第一个1的左边------>x&(x^(x-1)) 判断二进制中的1的个数是偶数个还是奇数个int have_jo(原创 2013-11-23 21:27:55 · 1837 阅读 · 0 评论