05 2012 档案
最大流的解释
摘要:最大流问题 Edmonds-Karp算法图论中的最大流问题解法一般分为两类:(1)增广路径方法。这个方法是由Ford-Fulkerson俩人提出来的,所以这一类的方法统称Ford-Fulkerson算法。增广路径又叫流量增益路径,增广的意思我个人理解是“可扩张的”,是由多条边。这种方法总体思想是先找到一条从源点到汇点的增广路径,这条路径不管由多少条边组成,这条路径的容量只能是其中容量最小的边的容量。这其实就是桶的短板效应(我的理解是在图论中也就是最大流最小割定理)。如果我们能找到所有这样的路径(路径是可部分重叠的),那么最后一定能得到最大流。(证明就是最大流最小割定理)。当然,我们每找到一条之 阅读全文
posted @ 2012-05-31 11:42 有间博客 阅读(1270) 评论(0) 推荐(0)
最大流模板2
摘要:#include<iostream>#include<queue>usingnamespacestd;#definemin(a,b)(a)<(b)?a:b#defineN16intcapacity[N][N];//容量intflow[N];//残余容量intpre[N];//前驱结点intn,m;queue<int>qu;intBFS(intsrc,intdes){while(!qu.empty())qu.pop();for(inti=1;i<=n;i++)pre[i]=-1;pre[src]=0;flow[src]=INT_MAX;//初始化源 阅读全文
posted @ 2012-05-30 10:15 有间博客 阅读(481) 评论(0) 推荐(0)
网络流入门
摘要:网络流的最经典应用就是最大流....给定一个图...给出每条边能流过的最大流量...求源点到汇点的最大流量.... 求解网络流的基本思想就是每次寻找增广路(就是源点到汇点的一条可行路)..然后ans+=增广路能流过的流量..更新剩余网络..然后再做增广路...直到做不出增广路..关于网络流入门最难理解的地方就是剩余网络了....为什么在找到一条增广路后...不仅要将每条边的可行流量减去增广路能流过的流量...还要将每条边的反向弧加上增广路能流过的流量.?..原因是在做增广路时可能会阻塞后面的增广路...或者说做增广路本来是有个顺序才能找完最大流的.....但我们是任意找的...为了修正...就 阅读全文
posted @ 2012-05-29 22:19 有间博客 阅读(23887) 评论(1) 推荐(4)
最大流模板
摘要:#include<cmath>usingnamespacestd;#include<numeric>#include<functional>#include<iostream>#include<algorithm>#include<bitset>#include<string>#include<cstring>#include<cstdio>#include<queue>#include<set>//Bychyx111typedefpair<int,int& 阅读全文
posted @ 2012-05-29 21:54 有间博客 阅读(616) 评论(0) 推荐(0)
最大流
摘要:最近又复习了下最大流问题,每次看这部分的内容都会有新的收获。可以说最大流问题的资料网上一搜一大把,根本没有必要自己写;但是大部分资料上的专业术语太多了,初学很难理解,至少我当年学这部分的时候前几次就没有看懂。所以我准备备份一点个人的理解。图-1 如图-1所示,在这个运输网络中,源点S和汇点T分别是1,7,各边的容量为C(u,v)。图中红色虚线所示就是一个可行流。标准图示法如图-2所示:其中p(u,v) / c(u,v)分别表示该边的实际流量与最大容量。关于最大流熟悉了什么是网络流,最大流也就很好理解了。就是对于任意的u∈V-{s},使得p(s,u)的和达到最大。上面的运输网络中,最大流如图-3 阅读全文
posted @ 2012-05-29 21:43 有间博客 阅读(404) 评论(3) 推荐(0)
网络流
摘要:网络流很多问题都可以转化成网络流问题,如运输货物时的物流问题,水流问题,匹配问题等等。网络是一个各条边都有权值和方向的图。网络流问题,一般情况下我们会把各种网络问题抽象成网络流问题,网络流是满足以下性质的网络:每一条边拥有一个最大的容量c,即该条边可以容纳的最大流量,f是流过该边的实际流量,且总有f<=c。对于图中每个顶点(源点和汇点除外)都有流出的流量等于流入的流量。图中只有一个源点一个汇点,且对于源点来说其流入量为0,对于汇点来说流出量为0,源点的流出量等于汇点的流入量,对于最大流问题既是要找出流入汇点的最大流量值。求最大流的算法:EK算法:EK算法中涉及的三个关键词:残留网络,增广 阅读全文
posted @ 2012-05-29 21:26 有间博客 阅读(300) 评论(0) 推荐(0)
卡特兰数的来源于拓展
摘要:关于扩展的卡特兰数:1.(n-m+1)/(n+1)*c(n+m,n)2.c[n+m][n]-c[n+m][m-1]Catalan,Eugene,Charles,卡特兰(1814~1894)比利时数学家,生于布鲁日(Brugge),早年在巴黎综合工科学校就读。1856年任列日(Liege)大学数学教授,并被选为比利时布鲁塞尔科学院院士。卡特兰一生共发表200多种数学各领域的论著。在微分几何中,他证明了下述所谓的卡特兰定理:当一个直纹曲线是平面和一般的螺旋面时,他只能是实的极小曲面。他还和雅可比(Jacobi,C·G·J)同时解决了多重积分的变量替换问题,建立了有关的公式。18 阅读全文
posted @ 2012-05-26 11:41 有间博客 阅读(998) 评论(0) 推荐(0)
卡特兰数的应用
摘要:Catalan数 中文:卡特兰数 原理: 令h(1)=1,h(0)=1,catalan数满足递归式: h(n)= h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1) (其中n>=2) 另类递归式: h(n)=((4*n-2)/(n+1))*h(n-1); 该递推关系的解为: h(n+1)=C(2n,n)/(n+1) (n=1,2,3,...) 我并不关心其解是怎么求出来的,我只想知道怎么用catalan数分析问题。 我总结了一下,最典型的四类应用:(实质上却都一样,无非是递归等式的应用,就看你能不能分解问题写出递归式了) 1.括号化问... 阅读全文
posted @ 2012-05-26 11:18 有间博客 阅读(731) 评论(0) 推荐(0)
ACM里的一些缩写
摘要:Received: The judge system has received your solution, usually you just need to wait a minute and your solution will be judged.Accepted (AC): OK! Your program is correct!Presentation Error (PE): Output Format Error. Your output format is not exactly the same as the judge's output, although your 阅读全文
posted @ 2012-05-25 21:49 有间博客 阅读(1478) 评论(0) 推荐(0)
Hdu 1019 Least Common Multiple
摘要:由求两个的最大公约数、最小公倍数推广到求N个数的最大公约数,最小公倍数。CODE:AC1#include<stdio.h>2#include<stdlib.h>3#include<string.h>45__int64gcd(__int64a,__int64b)6{7returnb==0?a:gcd(a,b);8}910intmain()11{12__int64n,m,a,b;13scanf("%I64d",&n);14while(n--)15{16scanf("%I64d",&m);17a=1;18wh 阅读全文
posted @ 2012-05-25 18:03 有间博客 阅读(265) 评论(0) 推荐(0)
Hdu 2024 C语言合法标识符
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2024。C语言标记符:1、首字母以__(下划线)开头或者字母开头,不能用数字。 2、中间的可以为数字,字母或者__(下划线)小技巧:#include<ctype.h>的应用。。isalpha(sz1[i])若是字母则返回非零值,否则返回零。isdigit(sz1[i])和isspace(sz1[i])依次类推。CODE:1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include&l 阅读全文
posted @ 2012-05-22 21:35 有间博客 阅读(237) 评论(0) 推荐(0)
Hdu 2015 偶数求和
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2040。水题。CODE:1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<math.h>5usingnamespacestd;67constintmaxn=102;89intsave[maxn]={0};1011voidinit()12{13intcnt=1;14for(inti=1;i<=100;i++)15{16save[cnt++]=i*2;17}18retu 阅读全文
posted @ 2012-05-22 20:17 有间博客 阅读(596) 评论(0) 推荐(0)
Hdu 1017 A Mathematical Curiosity
摘要:题目格式真恶心,WA无数次。CODE:1#include<stdlib.h>2#include<math.h>34#include<stdio.h>5intmain()6{7intn,m,N;8while(scanf("%d",&N)!=EOF)9{10for(intr=0;r<N;++r)11{12intt=1;13while(scanf("%d%d",&n,&m)!=EOF,n+m)14{15intcnt=0;16for(inti=1;i<n;++i)17{18for(intj= 阅读全文
posted @ 2012-05-21 21:55 有间博客 阅读(125) 评论(0) 推荐(0)
分析问题的方法(适用于ACM及其他方面的东西)
摘要:今天,我非常幸运和大家分享关于如何搞研究的思路规则。这是我们组合数学老师将他的三四十年的经验和我们分享,在此我要特别感谢陈教授!本人认为他讲的这套思路非常合理,也让我更深的认识到如何转眼一个方向。在此,我特将其思想展示出来,以便和大家分享牛人们的思想精华,同时加深我自己对此的理解。我想再一次特别特别感谢陈教授,谢谢!把你解决的问题理解透(你到底要解决什么问题?);把问题描述清楚,包括条件、概述等(是否存在等价描述?);哪个描述适合你(把复杂问题简化): 将复杂问题分解成几个小问题; 当复杂问题不能解决时,找特例解决; 随便找例子以验证你做特例时的方法是否正确; 如第3步正确,再更一般的例子验证 阅读全文
posted @ 2012-05-21 19:40 有间博客 阅读(205) 评论(0) 推荐(0)
湘潭邀请赛 Echo
摘要:签名题。。“湖南华园科技杯”第4届湘潭市程序设计比赛暨2012ACM/ICPC湘潭邀请赛(Semilive)题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1144EchoAccepted : 135Submit : 469Time Limit : 1000 MSMemory Limit : 65536 KB没有题目描述 有题目描述 题目描述 目描述 描述 述Input输入数据的第一行是一个整数T,代表有T组测试数据。接下来的T行,每行是由一句话构成的一组测试数据,每句话都由一个空格(ASC... 阅读全文
posted @ 2012-05-20 22:28 有间博客 阅读(483) 评论(0) 推荐(0)
计算几何算法概览 (二)
摘要:计算点到线段的最近点: 如果该线段平行于X轴(Y轴),则过点point作该线段所在直线的垂线,垂足很容易求得,然后计算出垂足,如果垂足在线段上则返回垂足,否则返回离垂足近的端点;如果该线段不平行于X轴也不平行于Y轴,则斜率存在且不为0。设线段的两端点为pt1和pt2,斜率为:k = ( pt2.y - pt1. y ) / (pt2.x - pt1.x );该直线方程为:y = k* ( x - pt1.x) + pt1.y。其垂线的斜率为 - 1 / k,垂线方程为:y = (-1/k) * (x - point.x) + point.y 。 联立两直线方程解得:x = ( k^2 * .. 阅读全文
posted @ 2012-05-20 21:29 有间博客 阅读(1057) 评论(0) 推荐(0)
计算几何算法概览 (一)
摘要:矢量的概念: 如果一条线段的端点是有次序之分的,我们把这种线段成为有向线段(directed segment)。如果有向线段p1p2的起点p1在坐标原点,我们可以把它称为矢量(vector)p2。矢量加减法: 设二维矢量P = ( x1, y1 ),Q = ( x2 , y2 ),则矢量加法定义为: P + Q = ( x1 + x2 , y1 + y2 ),同样的,矢量减法定义为: P - Q = ( x1 - x2 , y1 - y2 )。显然有性质 P + Q = Q + P,P - Q = - ( Q - P )。 矢量叉积: 计算矢量叉积是与直线和线段相关算法的核心部分。设矢... 阅读全文
posted @ 2012-05-20 21:28 有间博客 阅读(344) 评论(0) 推荐(0)
ACM主要算法
摘要:1.图论2.数据结构3.搜索4.动态规划5.模拟6.数学7.计算几何8.博弈论9.字符串=========================================初期:一.基本算法:(1)枚举. (poj1753,poj2965)(2)贪心(poj1328,poj2109,poj2586)(3)递归和分治法.(4)递推.(5)构造法.(poj3295)(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:(1)图的深度优先遍历和广度优先遍历.(2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dij 阅读全文
posted @ 2012-05-20 21:22 有间博客 阅读(262) 评论(0) 推荐(0)
湘潭邀请赛 Collatz Conjecture
摘要:签名题,注意别超范围,递归求解。。。题目链接:http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1142Collatz ConjectureAccepted : 117Submit : 716Time Limit : 8000 MSMemory Limit : 1048576 KB考拉兹猜想,又称为3n+1猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想,是指对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1。如n = 6,根据上述数式,得出6→3→10→5→ 阅读全文
posted @ 2012-05-20 21:12 有间博客 阅读(298) 评论(0) 推荐(0)
Hdu 1021 Fibonacci Again
摘要:数论-找规律。解决本题的关键:通过公式条件:F(0)= 7, F(1) = 11,F(n) = F(n-1) + F(n-2) (n>=2).找到规律。由同余式的基本性质:(1)自反性:a = a( mod m)。以及同余式的四则运算法则:(1)如果a =b( mod m)且c = d( mod m),则a +c = (b + d)( mod m)。可知,F(n) = F(n) ( mod m) = ( F(n-1) +F(n-2) )( mod m)。综上所述,可得到以下对应关系:F(1)=7%3 = 1 , F(1) = 11%3 = 2 , F(n) = ( F(n-1) + F( 阅读全文
posted @ 2012-05-20 16:38 有间博客 阅读(151) 评论(0) 推荐(0)
Hdu 1032 The 3n+1 Problem
摘要:水题。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=10321#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#defineMAX_LEN1000000156__int64count=0;7__int64Geted[MAX_LEN]={0};8910voidswap(__int64&a,__int64&b)11{12__int64temp=a;13a=b;14b=temp;15}1617voidGetMaxL(__int64n)18 阅读全文
posted @ 2012-05-20 16:08 有间博客 阅读(201) 评论(0) 推荐(0)
Bob的烦恼II 逃离迷宫
摘要:XTU热身赛出的题。本来这次比赛可以多些几道的,可惜脑袋浆糊掉了。。以后要更加努力,希望能超过师兄,师姐们啊。言归正传:这道题首先一看,它就是一道搜索题。搜索题:一般无外乎两种方法 1、DFS。2、BFS。想了想DFS只要用一个标记pre[maxn][maxn]的数组记录前一个坐标的方向就行,如果和前面不同则step++。后来果断超时。于是想起了BFS,怎么去判断它是否转弯呢?一个方向搜到底,到底时换方向的时候拐弯数加一,那么出队再拓展路径的时候拐弯数肯定也要加一,因为与这个点在一条直线上的点已经全部入队了。于是就有了下面的代码:#include<iostream>#include 阅读全文
posted @ 2012-05-20 15:01 有间博客 阅读(214) 评论(0) 推荐(0)
线段判交--ACM
摘要:给定两个点:typedef struct { double x, y;} Point;Point A1,A2,B1,B2;首先引入两个实验:a.快速排斥实验设以线段A1A2和线段B1B2为对角线的矩形为M,N;若M,N 不相交,则两个线段显然不相交;所以:满足第一个条件时:两个线段可能相交。b.跨立实验如果两线段相交,则两线段必然相互跨立对方.若A1A2跨立B1B2,则矢量( A1 - B1 ) 和(A2-B1)位于矢量(B2-B1)的两侧,即(A1-B1) × (B2-B1) * (A2-B1) × (B2-B1)<0。上式可改写成(A1-B1) × (B 阅读全文
posted @ 2012-05-18 20:35 有间博客 阅读(4459) 评论(0) 推荐(1)
Hdu 1026 Ignatius and the Princess I
摘要:典型的BFS加状态的问题,题目很好理解,只不过打印路径这里困扰了我许久。不过经过不懈的努力终于AC了。 泪奔。。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1026存在的问题:1、这道BFS可以不需要做标记,而我之前从来没接触过,所以理解起来较慢。2、遇到了打印路径的题就懵了,怎么去打印路径困扰了很久。3、老问题,BFS和DFS的精髓没理解透。小技巧:1、直接搜索如果Mintime[xx][yy] > Mintime[x][y] + w 的话则替代,而且需要把整个迷宫都搜索一遍。。2、由于是搜索整个迷宫,所以方向数组的定义可以为:cons 阅读全文
posted @ 2012-05-18 11:52 有间博客 阅读(228) 评论(0) 推荐(0)
C++按位异或运算符
摘要:参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0例如:10100001^00010001=101100000^0=0,0^1=1 0异或任何数=任何数1^0=1,1^1=0 1异或任何数-任何数取反任何数异或自己=把自己置0(1)按位异或可以用来使某些特定的位翻转,如对数10100001的第2位和第3位翻转,可以将数与00000110进行按位异或运算。 10100001^00000110=10100111 //1010 0001 ^ 0x06 = 1010 0001 ^ 6(2)通过按位异或运算,可以实现两个... 阅读全文
posted @ 2012-05-16 19:10 有间博客 阅读(21780) 评论(0) 推荐(1)
STL之Deque的使用方法
摘要:/*deque:是一个double-endedqueue, 1)支持随即存取,也就是[]操作符, 2)支持两端操作,push(pop)-back(front),在两端操作上与list效率差不多 因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面的原则: 1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list 3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。*/#include<iostream>#include<deque>usi 阅读全文
posted @ 2012-05-15 21:51 有间博客 阅读(12723) 评论(0) 推荐(2)
spfa经过deque(双向队列)优化后的模板
摘要:spfa经过deque(双向队列)优化后的模板//C#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<ctype.h>#include<time.h>//C++#include<iostream>#include<algorithm>#include<queue>#include<vector>#include<map>#include<list> 阅读全文
posted @ 2012-05-15 21:32 有间博客 阅读(467) 评论(0) 推荐(0)
二分查找的递归与非递归!
摘要:递归:intBinSearch(intArray[],intlow,inthigh,intkey/*要找的值*/){if(low<=high){intmid=(low+high)/2;if(key==Array[mid])returnmid;elseif(key<Array[mid])returnBinSearch(Array,low,mid-1,key);elseif(key>Array[mid])returnBinSearch(Array,mid+1,high,key);}elsereturn-1;}非递归:intBinSearch(intArray[],intSizeO 阅读全文
posted @ 2012-05-15 19:44 有间博客 阅读(289) 评论(0) 推荐(0)
广搜与深搜的小区别
摘要:一般来说,广搜常用于找单一的最短路线,或者是规模小的路径搜索,它的特点是"搜到就是最优解", 而深搜用于找多个解或者是"步数已知(好比3步就必需达到前提)"的标题,它的空间效率高,然则找到的不必定是最优解,必需记实并完成全数搜索,故一般情况下,深搜需要很是高效的剪枝(优化).像搜索最短路径这些的很显著若是用广搜,因为广搜的特征就是一层一层往下搜的,保证当前搜到的都是最优解,当然,最短路径只是一方面的操作,像什么起码状态转换也是可以操作的。深搜就是优先搜索一棵子树,然后是另一棵,它和广搜对比,有着内存需要相对较少的所长,八皇后标题就是典范楷模的操作,这类标 阅读全文
posted @ 2012-05-12 20:19 有间博客 阅读(7746) 评论(0) 推荐(3)
搜索的剪枝
摘要:半年前在POJ上遇到过一次剪枝的题目,那时觉得剪枝好神秘。。。今天在网上查了半天资料,终于还是摸索到了一点知识,但是相关资料并不多,在我看来,剪枝是技巧,而不是方法,也就是说,可能一点实用的小技巧,让程序可以少判断一点,这就是剪枝,剪枝无处不在,搜索的进程可以看作是从树根出发,遍历一棵倒置的树—-搜索树的过程。而所谓的剪枝,顾名思义,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是减去了搜索树中的某些“枝条”,故称剪枝。(杭电课件上是这么说的:即剪去解答树上已被证明不可能存在可行解或最优解的子树.)既然采用了搜索,剪枝就显得十分的必要,即使就简简单单的设一个槛值,或多加一两条判断,就 阅读全文
posted @ 2012-05-11 21:33 有间博客 阅读(3891) 评论(0) 推荐(0)
Hdu 1010 Tempter of the Bone
摘要:经典深搜加剪枝问题!问题主要是奇偶剪枝这地方卡了许久,步数剪枝也没考虑到,还有对DFS于BFS的区别了解不多。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1010存在的问题:1、对深搜和广搜的理解不深刻,特别是回溯的状态与条件。2、实现一个算法的速度还比较慢! 3、以后少花时间去追程序的BUG,多花时间去想想算法!剪枝前后对比:第一个是删掉奇偶剪枝后的情况:int temp=T - t - abs(x - n) - abs(y - m); //奇偶剪枝if(temp < 0 || temp & 1) return ;第二个是删掉步 阅读全文
posted @ 2012-05-11 17:38 有间博客 阅读(212) 评论(0) 推荐(0)
Hdu 1016 Prime Ring Problem
摘要:深搜,主要是搜索状态的确定与转移。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016通过题目发现的问题:1、对深搜确定一个搜索状态还不太清楚。2、实现一个算法还比较慢,以后要勤加练习!小结:深搜其实是一种盲目搜索,是利用计算机高效计算性能从而找到结果的一种方法!正确的CODE:1#include<stdio.h>2#include<stdlib.h>3#include<string.h>4#include<assert.h>5#include<math.h>6#defineMAX_L 阅读全文
posted @ 2012-05-11 16:45 有间博客 阅读(235) 评论(0) 推荐(0)
【算法模板之DFS于BFS】
摘要:DFS:/*该DFS框架以2D坐标范围为例,来体现DFS算法的实现思想。*/#include<cstdio>#include<cstring>#include<cstdlib>using namespace std;const int maxn=100;bool vst[maxn][maxn]; // 访问标记int map[maxn][maxn]; // 坐标范围int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量,(x,y)周围的四个方向bool CheckEdge(int x,int y) // 边界条件和约束条件的判断 阅读全文
posted @ 2012-05-10 17:04 有间博客 阅读(1033) 评论(0) 推荐(0)