摘要: http://poj.org/problem?id=1185Description司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队。一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示:如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。图上其它白色网格均攻击不到。从图上可见炮兵的攻击范围不受地 阅读全文
posted @ 2011-08-12 10:29 Accept 阅读(281) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=3254题意:输入一个n*m的矩阵,矩阵由数字0和1组成,0表示不能种植玉米的草地,1表示能够种植玉米的草地。然后在种植了玉米的草地上放牛,放牛的数目随意,但是要满足相邻的草地间不能同时放牛,要求所有放牛的方案总数。例如:2 31 1 10 1 0方案总数为9,因为将每块草地编号后得到12 304 0一头都不放有1种情况,放一头牛的方案为1,2,3,4都行,有4种,放两头牛的方案有(1,3) (1 4) (3 4),有3中,放三头牛的方案有(1,3,4)一种,一共9种!分析:地图显然是0和1构成,即用0,1来表示所有的情况,所以显然是二进制的 阅读全文
posted @ 2011-08-11 23:37 Accept 阅读(1179) 评论(0) 推荐(0) 编辑
摘要: 大概题意:用一个长2宽1的面积去覆盖图中所有的'*',面积间可以重叠。更简单的,就是用最少的连接两个相邻点的边,连接起图中所有的'*'。复杂的问题变成了最小路径覆盖分析:最小路径覆盖=所有的点数-最大独立集,而最大独立集就等于最大匹配数。再分析,这是一个无向图,A点连着B点,B点也同时连着A点。于是求的的最大匹配数是原匹配数的两倍,对于本题,最终答案为:所有'*'数-最大匹配数/2。也可以总结如下:对于有向图,最大独立集等于最大匹配数对于无向图,最大独立集等于最大匹配数/2建图:对每个'*'给一个号码,由于面积是1*2的,所有每个 阅读全文
posted @ 2011-08-09 14:58 Accept 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 相关联系:hdu 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活hdu 2844 coins第一题是一个关于多重背包的问题,即给定每个物品的价格和数量,在有限背包中求得可以装进背包的最大价值,一般的做法就是将多重背包转化为诺干个01背包来解决,例如某个物品有1000个,则转化为将这个物品看成1000个只有一个数量的该物品,然后运用01背包,容量反向动规求的解!可是如果某个物品的数量是1W、10W或者是100W,那么岂不是要求上W个01背包了,不超时才怪。那么有什么好办法可以解决这样的问题呢?从上面的方法中我们看出,我们处理问题的方法是一个一个处理物品,物品有1W个,我们便处理1W 阅读全文
posted @ 2011-08-06 15:43 Accept 阅读(1019) 评论(0) 推荐(0) 编辑
摘要: 对于有向图中,连通分量叫强连通分量对于无向图中,连通分量叫双连通分量,而在双连通分量中,又分为点双连通和边双连通。重点讨论双连通的情况:以割点区分连通情况的双连通叫做点双连通分量,以割边区分连通情况的双连通叫做边双连通分量。比如这个图中:1 4| \ / \| \ / \| 2 5| / \/| / \/36如果要的到两个连通分量的话,我们只有以2节点为割点,将图分为点双连通。我们便可以得到两个双连通分量(1,2,3)、(2,4,5,6)。再比如这个图:1 5| \ / \| \ / \|2—4 6| / \/| / \/3 7如果要得到两个连通分量的话,我们只能以(2,4)边为割边,得到两个 阅读全文
posted @ 2011-08-03 13:43 Accept 阅读(3074) 评论(0) 推荐(0) 编辑
摘要: 该题有两种输入1、P A B X 。表示A到B的距离点明了为X:A-B==X,等价于A-B<=X&& A-B>=X (B-A<=-X)。于是得到两条边(A,B,X)和(B,A,-X)。以前我很纠结A-B<=X是建成(A,B,X)呢,还是(B,A,X)呢,今天我实践了一下,发现都无关紧要,关键是接下来的所有边,你都得按照这个顺序来就是了!2、V A B 。表示A到B的距离最少为1:即A-B>=1,等价于B-A<=-1,得到边(B,A,-1)。最后再从原点向所有点引一条边权为0的边(S,i,0) i=1->n。图建好了,用SPFA求解即可, 阅读全文
posted @ 2011-08-02 23:24 Accept 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 题目大意是在一棵树中,通过提问的方式找出任意两点间的最短距离。对每颗树的提问次数可高达1W次。分析:此题高达4W多个点,4W多条边,还有如此高的提问次数,针对题目次数这么多,我们容易想到将每两个点的距离都找出来,以后你问一个我直接作答。而且更容易想到的是floyd算法,可是我们注意到节点高达4W。肯定超时!我们要注意这是一棵树,在一棵树中,两个节点通过公共祖先而互达的那条边一定是最短的。那么问题便转化为了求公共祖先。利用LCA的离线tarjan算法,我们可以轻松的找到任意两点间的祖先,同时在深度遍历的同时,记录所有点到root的距离。最后我们只要输出该两点离root的距离之和减去两倍的祖先到r 阅读全文
posted @ 2011-08-02 22:21 Accept 阅读(381) 评论(0) 推荐(0) 编辑
摘要: lca算法是用于在一个树或者一个图中,找出两个节点的公共祖先的算法。有什么用呢?举一个例子:在一棵树上,当我们随便添加一条边的时候,那么就会在原来的树上形成环。如何把这个环找出来呢?嘿嘿,lca算法便是了!lca算法是运用需要一个预热的过程,简单的说,就是他需要一棵树或者一个图中节点的每个点的深度和父节点。呵呵,简单啊,DFS就是了。接下来根据已知的信息,不断的将两个节点往回迭代,直到找到了同一高度,同一个父节点。这个节点便是他们两点的公共祖先了,而这个过程经过的边加起来,便是我们要找的环!1、DFS(略)2、Int lca(int u,int v) //lca算法,在某一个图中,找出u,v的 阅读全文
posted @ 2011-08-02 14:11 Accept 阅读(2109) 评论(0) 推荐(0) 编辑
摘要: 在做网络流题目的时候,我们时常因为无法正确建图而遗憾错过本应该的AC。今天通过一些题目,我好好记录一下自己对最大流、最小割的学习感受。Hdu 1565,题意:给你一个矩阵,矩阵上每个点上都有一个数字,现在要你在矩阵中取一些数字,使得取得的数字和最大!规则:相邻的格子不能同时取,即取了一个以后,它四周的数字便不能再取了。分析:(题目实际就是求一个无向图的最大点权独立集)这种方格的题目,我们最容易想到二分图,最大流等等。事实上,也确实是用最大流来解二分图。首先建图:我们将行列相加为奇数的点与S相连,容量就为该点的点权,行列相加为偶数的点与T相连,容量同样为该点的点权。然后,所有与S相连的点,将它与 阅读全文
posted @ 2011-07-31 22:34 Accept 阅读(3406) 评论(0) 推荐(0) 编辑
摘要: 知道图论的一些定义和性质对我们解题实在是太有帮助了,我就吃多了这亏,现在一点点的总结,以后还会跟新无向图:点覆盖集:无向图G的一个点集,使得该图中所有边都至少有一个端点在该点集中。最小点权覆盖集:在带点权无向图G中,点权和最小的点覆盖集。点独立集:无向图G的一个点集,使得任何两个在点集中的点在图G中都不相邻。最大点权独立集:在无向带权图G中,点权和最大的点独立集。最小点权覆盖集=最小割=最大流最大点权独立集=总权-最小点权覆盖集有向图:最小路径覆盖:就是找出最小的路径条数,使之成为P的一个路径覆盖. 路径覆盖与二分图匹配的关系(必须是没有圈的有向图) 最小路径覆盖=|P|-最大匹配数;而在无向 阅读全文
posted @ 2011-07-31 14:43 Accept 阅读(1022) 评论(0) 推荐(0) 编辑