自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

AClion的专栏

小弱鸟而已!

  • 博客(175)
  • 收藏
  • 关注

转载 什么是回调函数

其实,回调函数大多只是自己定义一个名字而已,函数体大多是系统定义好的,它有一个结构,一般一个代回调函数的的函数都有一个参数是接你的回调名的,它把一些值传进回调函数(函数体包括参数是它预定好的,不能自己写,除非全部函数都是你写的),然后回调函数接受值,相应操作后将值返回到原函数体(它的父亲函数),最终让原函数返回一个值我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理、用

2014-04-24 14:42:51 1308

原创 Sorting It All Out

这是一道拓扑排序的问题。ganjuedaoz

2014-04-04 21:32:55 1055 1

原创 我现在很菜,但是我在努力让自己变得不那么菜

忙完了一系列很DT的事情,现在还是要回归到算法的学习上。今天在场外看了小伙伴们的比赛,我们确实有不足,而且我的感受就是我们欠缺的地方还有很多。其实一直以来,就很想好好学习算法,不为其他的事情的所困。我总是把算法的学习当做一种学习,但是事实上,如果这是一种兴趣爱好,我想我会做得更好。总之,博客依然要继续写,这是我的算法笔记,也是我的成长之路。所以,加油!或许我现在很菜,但是我正在努力

2014-03-30 19:38:09 1358 2

原创 HDU 4081 Qin Shi Huang's National Road System (枚举次小生成树)

#include #include #include #include #include #include #include #include #include using namespace std;#define eps 1e-9const int N = 1010;const int INF = 100000.0;int T, n;double maxcost[N

2013-10-14 15:45:06 874

原创 hdu 1914 The Stable Marriage Problem(延迟认可算法)

这篇解释得比较好:      点击打开链接稳定婚姻问题:实际上就是n男n女,每个人都对其他异性有一个喜欢值,給他们匹配,然后最后得到他们关系比较稳定的一种方法。其中要使得关系稳定,要满足的条件是两个人中任何一个人都认为自己的配偶是喜欢自己的人中最好,这样如果一个想出轨,一定不会找比自己现任差的,可是比自己现任好的又不会喜欢他,因为人家认为人家的现任要比他好。所以婚姻稳定。算法:简单说就是,

2013-08-05 22:02:43 1061

原创 poj 2762 Going from u to v or v to u (tarjan+缩点+dfs搜索)

这道题大致想法没有问题,首先要缩点,然后重构图,判断重构的图是不是弱连通。这里有分析可知,不管图是什么样的,里面一定存在一条链,从入度为0的点走到出度为0的点,这一路上要包括所有的点。要想任意两点都能弱连通,那么必然边的方向是一定。tarjan缩点,重构图就不用解释了,主要是后面怎么判断DAG是不是有一条链包括所有的点。这里用的是dfs搜索,查过其他牛们的博客,还有拓扑排序(如果删掉一个点后,

2013-08-04 00:25:32 1942 1

原创 poj 2186 Popular cows ( tarjan )

这道题开始的我忽略了如果它不连通的情况,判断的时候连着入度判断让入度不为0,出度为1, 但是如果是不连通的话,那就错了,两个scc之间没有边的话,入度都为0,出度也都为0;并且,如果这个scc块出度为0,并且整张图不是scc的话,那么这个scc块入度必然不会为0,完全没有判断的必要!题目是说要找最受欢迎的cows,一个cow只有被所有其他的cows认可才算是最受欢迎。所有这道题也就是求,从图中

2013-08-03 21:55:37 910

原创 hdu 4635 Strongly connected (tarjan)

把所有scc找出来,缩点,然后在出度为0或入度为0的的块中选择点数最小的块作为独立块,使得这一块和其他的块不能强连通,其余的点都实现强连通即可!#include #include #include #include using namespace std;const int N = 100010;vector G[N];int pre[N], lowlink[N], sccn

2013-08-03 08:14:06 935

原创 hdu 3046 Pleasant sheep and big big wolf(sap最大流)

开始在hrbust上做的,数据改为20,用矩阵和普通的最大流算法均可以过!后来查的时候看到了hdu上的,数据比那个大很多,点数最多可达40000,第一次MLE,换成邻接表,第二次TLE,果断换算法,sap轻松秒过!建图的方法就是远点连2, 终点连1,容量inf, 把每个挨着的格子连起来,容量1,求最小割! 这里求最小割很好理解,就像从一个2开始走,向1走,然后每次走都会经过一个格子的边界,一般

2013-08-02 22:20:03 825

原创 poj 3281 dining( 最大流 )

这里很显然是拆点。但是在呢么拆呢之前做的时候,是拆的牛,今天拆的食物和水,果断错了,按照我的建图方法,S连牛,牛连水,水连食物,食物连E,很显然,无法保证从牛出的到水,然后从水走出的边无法保证是之前那个牛喜欢的食物,因此错!正常的建图,S连水,水连牛,牛拆点,牛连食物,食物连E!细节见代码:#include #include int N, F, D, map[500][500

2013-08-02 20:17:51 749

原创 poj1236 Network of School ( tarjian + 缩点 )

这算是我实现的第一个强连通分量(scc)的题目, 之前一直对于缩点有畏惧的心理,总觉得很复杂,其实很简单。只要遍历每个边,如果一个遍的起点和终点不在同一个连通分量中,那么这个两个连通分量就之间就应该有一条边,同时,如果要建一个新图(DAG)的话,那么要判断这个边是不是之前有加过,排除重复加边(因为在两个连通分量中,可能有两条来自这个两个scc中的点,可能是四个点也可能是3个点构成的边,或者更多的方

2013-08-02 11:09:42 1029

原创 7-24 搜索

有一段时间没有这样的做题了,做了一天的题。今天把树状数组也简单复习了一下。今天跟着HRBUST训练又弄了一下搜索的相关题目,说实话,做得有些艰难。A题: 开始居然忘记标记了,很典型的BFS问题,居然没有写v,这肯定是要超时的啊。然后第二个很奇葩的错误是居然没有进行上下界的限定,导致内存溢出;接着下一个问题就是超时,我上来就开始搜,没有仔细想过每种情况,怎么可以节省时间,以至于一直超时的状态

2013-07-24 20:14:19 819

原创 手生了 水题做了好久

有些日子没有做题了,忙着做英语,忙着期末考试,看了一点点的书,就是没有时间做题。不做题,手就生了。连曾经做过的搜索题,那么简单的都有点力不从心。知道是搜索,但是完全把stl忘到脑后了,最后一道水题,想了好久。话说我也是,心思分了一半给英语,每次做题都不能专心。做题 真的和听力一样,贵在坚持!真的有足够的时间,就一点都不要落下才好!

2013-07-19 21:56:11 900

原创 UVa 160 Factors ans Factorials(数论)

自从换了linux,就没写过题解。今天开始要继续写。首先,求一个数的阶层里面每个素数因子的个数,那么我们就可以求从2开始到这个数的每个数的素数因子的个数,相应加和。比如是10!= 1*2*3*4*5*6*7*8*9*10, 那么 这里面2的个数就是2,4, 6, 8, 10里面2的因子数的加和1+2+1+3+1=8。依次类推接下来就是求每个数的素因子及其个数,模板即可。不是很难的题目其

2013-06-16 17:53:25 1115

原创 Uva live 4043 Ants( KM+简单的计算几何)

一定要清楚的一个问题,就是:(如图)两条黑色的线的和一定小于蓝色的和,但是平方的和之间就不一定是这个关系了!代码:#include #include #include #include #include using namespace std;const double INF = 0x7fffffff;const double eps = 1e-9;const i

2013-05-26 15:23:19 1091

原创 从"0"开始

虽然一直在学习图论,但我也只是一枚弱菜,很弱很弱!学习还是要循序渐进的,所以对于很多问题,我并不能分析很明白,或许ACM并不只是要学习算法,在比赛的过程,心理素质,分析问题的能力,解决问题的能力,队友之间的配合,还有很多其他的能力,都很重要。在赛场,不管怎样的境况,都能静下心来读题,分析问题,解决问题,不管别人怎样,都能同一步调将比赛进行到底!不管怎样的境况,都能不急不燥!在这些之前,

2013-05-26 15:13:59 1275 4

原创 UVa 417 Word Index

思路是这样的,就像是数字一样,2010,在最高位包含了2个一千,接着是0个一百,1个十,0个一。那么对于一个字符串,abcde,也是这样的道理,最高位包含的个数,加第二位的,一次类推。例如,从ab……az一共包含了25个字符串,从bc……bz是24,因此两位数的时候,一共应该有多少个呢?1+2+3+……+25这么多个!那么三位字符包含了多少个?对于以a开头的,应该是bc……bz+cd……cz+……

2013-05-26 14:42:38 1185

原创 HDU 2255 奔小康赚大钱(KM模板)

打模板一定要注意!#include #include #include #include using namespace std;const int N = 350;const int INF = 0x7fffffff;int n, w[N][N], lx[N], ly[N], le[N];bool S[N], T[N];void update(){ int a

2013-05-16 14:59:35 863

原创 UVa 872 Ordering(拓扑排序输出全部路径)

给出一些大小的条件,要求写出所有满足拓扑次序的排列。按照字典序输出。首先要总结一下:每次提交之前都要先检查一下题目中要求的输入和输出,看看自己的代码有没有满足这些要求!然后说一下题目的思路:第一,用邻接表进行存储,在输入边的同时,要计算每个点的入度,根据拓扑的性质,要在所有前驱结点都遍历了之后才能边当前节点,我们每次都要找到没有前驱结点的点放到序列的尾部。第二,在实现的过程中,dfs来实现

2013-05-15 18:09:21 1851

原创 796 Critical Links( 求无向图中的桥--模板)

很典型的求无向图的桥个数,并且输出代码:#include #include #include #include using namespace std;const int N = 110;int n, ans, g[N][N];int dfs_clock, pre[N], low[N];bool is[N][N];int dfs( int u, int fa ){

2013-05-14 14:12:07 1274

原创 UVa 315 Network ( 求割顶)

这道题很简单,就是一道模板,求一共有多少个割顶。开始时候,模板理解得有点偏差,不过好在又想了想。这里要注意的是,主函数里面的那个for循环是必要,一面一个图有多个连通分量。同时,还要注意不要忘记填加vis这个标记,如果不添加vis也是可以的,因为pre也是一样的功能。代码:#include #include #include using namespace std;const

2013-05-13 12:02:19 1847

原创 UVa 11733 Airports( MST )

先建一棵最小生成树,然后看有几个连通分量,就建几个机场,最后从已选择的边中,将删除所有比建机场贵的边,加上相应的机场数!解题思路要清晰代码:#include #include #include #include using namespace std;const int N = 10010;const int M = 100010;int T, A;int n, m,

2013-05-12 22:49:29 1642

原创 UVa 10603 Fill( BFS + 判重)

隐式图搜索是最难受的题目之一,但是一般情况下,如果是隐式图搜索的话,都要记录状态,都会有一个状态的转移。比如这道题,其实状态是只有第三个杯子里面有装满水,第一和第二个杯子里面都是空,那么这个状态可以转移的话,只能有两个方向的转移。第一是想第一杯子倒水,第二是向第二个杯子倒水,那无论是那种转移,只要这个状态曾经存在过,那么这个状态能转移到的状态就已经遍历过,并且每个状态都要有一个唯一的标识,可以

2013-05-12 17:10:02 859

原创 uva 10507 Waking up Brain( 搜索 )

题目:一个图,源点有三个,每个点被遍历的条件是这个点和三个已经遍历过的点相连!初始的时候,有三个点是已经遍历过的,问每个点被遍历的时间!分析:我选择广度优先搜索。对每一个和遍历过的点相连的进行判断,判断是否和三个以上的遍历过的点相连,如果是,那么把它加入队列,同时它wake时间是所有与它相连的并且已经遍历过的点的第三小的时间加1(这个要自己好好考虑,仔细读题)。然后把这个点设为已遍历!代码

2013-05-12 13:46:18 976

原创 这些年的这些事

今天,和队友磨合,一起做题,我们确实一起解决了一些问题,把wa的代码ac, 解决了很多细节的问题。今天一天,很充实,很快乐,这种感觉很好,感谢宇神,感谢未来的童神,感谢我们这个大团队里面的所有人,让我感受到我从未有过的踏实,让我觉得自己并不孤单。虽然,在今天结束的时候,宇神说题做得确实慢,还wa了很多次,不是很满意,但是我们也从这些错误中学到了很多很有用的东西,也积累了一些经验,比如我以后

2013-05-11 22:45:12 1010 1

原创 UVa 100 3n+1

这道题,wa死我了!宇神要是不提醒我,我估计我还wa着呢!题不难想,但是陷阱是不少!首先,输入的i和j不一定是从小到大;其次,i和j的输出位置不可以调换;还有,ans和cnt还有f[N]最好是用longlong类型;最后,要注意一个f的大小,用f存储的时候,要判断一下下标是否越界,最大的tmp不能超过N!AC实属不易,考虑问题要全面,清楚!优化的后的代码:#include #

2013-05-09 15:42:52 902

原创 POJ 2446 Chessboard (二分匹配)

这道题wa了三次很可惜,其实很简单!第一次是RE,32*32=1024,好丢人!第二次是没注意,(x,y)表示y行x列,直接按照原有经验,搞成了x行y列!丢人!第三次是双层for循环,j的那个内层循环只循环到n结束,正确的是应该到m结束!这篇总结必然好好保存,写代码真的要认真!代码:#include #include #include #include using

2013-05-08 17:05:38 731

原创 POJ 2771 Guardian of Decency(最大独立点集)

把有可能在一起的连边,求最大独立点集代码:#include #include #include #include #include using namespace std;const int N = 550;struct pupils { int h; string sex; string music; string sport;}P[N]

2013-05-08 15:43:55 736

原创 HDU 1151 Air Raid( 最小路径覆盖 )

这道题是很经典的最小路径覆盖问题。最小路径覆盖,是指在有向无环图中,选择最少的点作为起点,使得遍历图中所有的点有且仅有一次。因此,每个单独的顶点可以看做是一条路径。最小路径覆盖=N-原图的最大二分匹配数。代码:#include #include const int N = 150;int n, m;int bmap[N][N], cy[N];bool vis[N];bool

2013-05-08 11:17:38 817

原创 HDU 3829 Cat VS Dog (最大独立点集)

这道题,要好好写一下总结。开始的时候,我把猫和狗作为顶点,求最大独立点集,但是后来发现,这个是有问题的。画了一个图,然后模拟了样例2,发现这个边可以重复,也就是说可有不同的小孩的like和dislike是一样的,那么这中情况下,删除一个点,可是多少个孩子高兴就不一定了。于是感觉到这建图是有问题的。仔细分析一下题目,说删除一个孩子不喜欢的动物,会使这个孩子,但是喜欢这个动物的孩子就会不高

2013-05-08 09:54:39 870

原创 HDU 1150 Machine Schedule(最小顶点覆盖)

这道题就是求最小顶点覆盖,其中要注意的是,当有一个任务可以用mode 0来实现的,就可以不加边,因为不需要重启!先把0的都做完,再换机器,就相当于没有0的这个要求了,因此,忽略mode 0可以做的任务。开门红!Yes!代码:#include #include const int N = 110;int ln, rn, k, bmap[N][N], cy[N];bool vis

2013-05-08 06:59:50 749

原创 HDU 1054 Strategic Game (最小顶点覆盖)

刚开始想得难了,打算把二分图建出来,把顶点分开!其实不用,直接对原图求最大匹配,然后除以2.这里刚开始敲模板,把下标弄错了,题目是从0开始,我直接从1开始!还有一件事情,一定一定要记得,就是给bmap初始化!!!!很重要,至关重要的!!!代码:#include #include #include using namespace std;const int N = 1515;

2013-05-07 22:27:37 1024

原创 POJ 3692 Kindergarten ( 最大独立点集 )

这道题是求最大独立点集!最大独立点集=N - 最小顶点覆盖=N-最大匹配。反建图,将不认识的连上边!代码:#include #include const int N = 220;int ln, rn, M;int bmap[N][N], cy[N];bool used[N];bool dfs( int u ) { for ( int v = 1; v <=

2013-05-07 21:04:05 937

原创 POJ 1274 The Perfect Stall(二分匹配)

水!瞬秒的题目!如有不懂,就看算法吧!但愿这次比赛有这样水的题目,哈哈!代码:#include #include const int N = 220;int ln, rn, bmap[N][N], cy[N];bool used[N];bool dfs( int u ) { for ( int v = 1; v <= rn; ++v ) if ( bmap[u][v

2013-05-06 22:11:46 701

原创 POJ 3020 Antenna Placement (二分匹配)

这道题要求对二分匹配有一个比较详细的了解!同时还要动一点小小的脑筋!和hdu4185是一个建图思想,然后不一样的是,4185里面不要求覆盖所有的点,但是这个题目是要求覆盖所有的点,用少的椭圆!那么很显然,要求一个最大匹配,然后看有几个点没有匹配上的,就在最大匹配的基础上加上几个椭圆!还有,这道题,第一次提交RE了,是因为我把数组最大订到了40,忘记了如果给每个点标记后,一共最多可能有4

2013-05-06 21:55:26 1101

原创 HDU 2389 Rain on Your Parader(二分图匹配Hopcroft-Carp)

这道题目,点数比较多,用匈牙利算法会超时!题目很简答,现在发现二分匹配建图很重要。这道题就是把人和人能在t时间内可以拿到的雨伞连起来即可,一左一右。很傻的错误就是在最后输出的时候,printf函数里面应该是表示数据组号的地方的%d我直接写成1,导致最后结果会变成1 2 3……所以以后写代码还是要注意格式,注意格式的逻辑性和保证思维的清晰度!代码如下:#include #inclu

2013-05-06 19:57:11 877

原创 HDU 4185 Oil Skimming ( 二分匹配建图 )

这道题最难的部分就是建图,能想到怎么建图,就没有问题了,直接套模板即可。建图:将每个‘#’的格子作为一个节点,和与它相邻的格子连线,构建一个图,求这个图的最大二分匹配!要注意的是,这个图的最大二分匹配,是把所有的‘#’既做为左边,有作为右边,因此,匹配出来的是答案的二倍。即一个点被匹配了两次,因为在建图的过程中,比如(1,2)这条边,它还有对应的(2,1)这条边,仔细看看建图,画一下就懂了!

2013-05-06 18:18:27 909

原创 POJ 3041 Asteroid (二分匹配模板-二分图最小覆盖)

这道题题是很经典的建模的题目,也是比较基础的二分匹配题目。二分最小覆盖就是说选择尽可能少的点,然后使得每条边至少有一个端点被选中。可以证明的是最小覆盖数就是最大匹配数。代码:#include #include #include using namespace std;const int N = 510;int n, k;int g[N][N], cy[N];bool u

2013-05-06 17:44:24 985

原创 HDU 2819 Swap (最大二分匹配+输出路径)

题目大意就是给出一个矩阵,每个格子里面要么是0, 要么是1;是否能够经过交换(交换行或者列)使得主对角线上都是1。其实就行和列的匹配,左边是行,右边是列,然后如果行列交点是1,那么就可以匹配,看是否为完美匹配,然后输出怎么交换的。开始很蒙的,后来仔细去想,可以这样理解,想要对角线上都是1,那么我们就可以锁定行,来选择列和它匹配,将选择的列移动到和该行形成对角线上是1的位置,比如和第一行匹配的列

2013-05-05 19:58:15 1248

原创 HDU 1281 棋盘游戏(最大二分匹配)

还是一样,熟悉模板!然后就是先这个样的题目,同一行活同一列只能有一个子的题目,可以用二分匹配来做,也就是每一行只能陪一列,不能重复!这道题,也是一个一个点试出来的,看看有没有等价边!代码:#include #include #include using namespace std;int const N = 110;int n, m, k, g[N][N];int c

2013-05-05 16:40:23 803

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除