上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页
摘要: 题意:对于一个数列A,substring是一个连续子串,subsequence是其非连续子序列。对于一个数字序列,记它的diversity是它的最大元素减去最小元素的差。给出一个数字序列,求与它diversity相同的substring和subsequence各有多少个。比如若A为1,4,3,4,则答案为3和6。解法:组合数学问题。首先,记A中最大元素为ma,最小元素为mi,且最大元素有s1个,最小元素有s2个,数列A长度为n。 则A的所有subsequence共有2^n个,不含ma的subsequence有2^(n-s1)个,不含mi的subsequence有2^(n-s2)个,mi和m.. 阅读全文
posted @ 2013-12-03 20:25 Plumrain 阅读(347) 评论(0) 推荐(0) 编辑
摘要: 题意:有p个无限电波发射点,他们每个的有效范围都是d,即能与半径为d的圆内的其他无线电波点传递信息。同时,这些无线电波点之中可以选择s个点建立通讯卫星,建立了通讯卫星的之后的点都能传递信息。给出p,s和每个无线电波发射点的坐标,求d的最小值。解法:此处就是做一遍最小生成树,输出树的所有边中第s大的那个的值。具体证明过程见[小结论]使生成树的第k大的边最小的边的求法。tag:MST 1 /* 2 * Author: Plumrain 3 * Created Time: 2013-12-02 23:36 4 * File Name: G-POJ-2349.cpp 5 */ ... 阅读全文
posted @ 2013-12-03 02:29 Plumrain 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 1、问题:对一个图,要求某一个生成树,使得该生成树第k大的边最小。(来源于POJ 2349)结论:对图做一遍最小生成树,所求边即为最小生成树中第k大的边。证法:考虑求MST的Kruskal算法。 在使用Kruskal求MST的过程中,从小权边到大权边遍历所有边,遍历到每一条边的时候检查一下若将它加入生成树是否会形成环,若不形成则将它加入生成树,这样遍历完所有边之后就能求出最小生成树。 若存在一个生成树T',其第k大的边比MST(记为T)中第k大的边权值小。记T'中第k大的边为l1,T中第k大的边为l2。图中所有边按小到大排序为a1,a2...am。不妨设l1为ai,l2为aj, 阅读全文
posted @ 2013-12-02 23:35 Plumrain 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 畅通工程系列都是比较裸的最小生成树问题,且是中文题目,不赘述了。1、HDU 1863畅通工程题意:一个省有很多村庄,其中一些之间是可以建公路的,每条公路都需要不同的代价,问代价最小的情况下将所有村庄都连通。解法:裸的最小生成树。tag:MST由于才学MST,两种算法一个写了一遍:Kruskal: 1 /* 2 * Author: Plumrain 3 * Created Time: 2013-11-30 10:21 4 * File Name: G-HDU-1863.cpp 5 */ 6 #include 7 #include 8 #include 9 10 using na... 阅读全文
posted @ 2013-12-01 02:44 Plumrain 阅读(384) 评论(0) 推荐(0) 编辑
摘要: 在图论中,求MST的Prim算法和求最短路的Dijskra算法非常像。可是我一直都对这两个算法处于要懂不懂的状态,现在,就来总结一下这两个算法。最小生成树(MST)—Prim算法:算法步骤:•将顶点集V分成两个集合A和B,其中集合A表示目前已经在MST中的顶点,而集合B则表示目前不在MST中的顶点。•寻找与集合A连通的最短的边(u,v),将这条边加入最小生成树中。(此时,与(u,v)相连的顶点,不妨设为Bi,也应加入集合A中。•重复第二步,直至集合B为空集。正确性证明:1、由归纳法可知,只需要证明 “每次向集合A中加入一条边后都能保证,集合A这个生成树是关联到集合A中所有点的最小生成树”,就能 阅读全文
posted @ 2013-11-30 23:17 Plumrain 阅读(3237) 评论(0) 推荐(0) 编辑
摘要: 并查集是一个高效的数据结构,最简单的作用是用来判断图中的两个点是不是属于同一个连通分量。我们可以将图中的每一个连通分量看成一个集合,每个集合都有一个特征值。比如{1,2,3,4}的特征值为1,那么记f[1] = f[2] = f[3] = f[4] = 1,则这样可以通过判定两个点的f值来判定是不是属于同一个连通分量。然后,我们用树的形式来记录集合,并且这个树只需要包含集合中的所有点即可,而不需要在意树的具体形式。而这个集合的特征值,则为根节点的节点编号。这样的话,如果该树是条长长的链,则每次求叶子节点的f值时都需要几乎遍历所有节点,这样的话时间复杂度就会很高。所以,我们每次求了一个点的f值都 阅读全文
posted @ 2013-11-30 01:20 Plumrain 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 题意:有一些简单化合物,每种化合物含有两种元素,要将这些化合物装到车上,但是如果车上的化合物中,存在某k个化合物正好包含k种元素,则会爆炸。现在你是装箱工人,每当你拿到一个化合物,你都会检查如果将它装到车上是否会参生爆炸,如果会你就会拒绝将这个化合物装上车。问一共会拒绝装多少个化合物。解法:将每种元素视为一个点,每种化合物视为一条边,也就是说,不能存在某k个点,恰巧为一个环。这样的话,就是每次拿到一个化合物检查一下两种元素是否在同一个连通分量里,如果在则不能装箱。这样就是一个裸的并查集了。tag:并查集 1 /* 2 * Author: Plumrain 3 * Created Time... 阅读全文
posted @ 2013-11-29 23:15 Plumrain 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个星球(编号0到n-1),有些星球之间有路径相连,且每个星球都有一个power值。每个星球可以求助,它会选择与它直接或间接相连的星球里power值最大的一个(如果有power最大且相等的几个星球,选择编号最小的一个星球),如果那个星球的power值比自己大,则向其求助,否则不能求助。现在,给出两种操作query a和destroy a b,前者的意思是问星球a会向哪个星球求助(不能求助输出-1),后者的意思是毁坏星球a和星球b之间直接连接的路径。(n 7 #include 8 #include 9 #include 10 11 using namespace std;... 阅读全文
posted @ 2013-11-29 00:36 Plumrain 阅读(380) 评论(0) 推荐(0) 编辑
摘要: 题意:有一些人玩石头剪刀布,其中有一个人(称其为裁判)可以出“石头”,“剪刀”,“布”中的任意一个,其他人永远只能出相同的一个。即有的人只能出剪刀,有的人只能出石头,有的人只能出布。进行了多次对决,每次只告诉你谁赢了(或者平手),不说谁出了什么。问能否判断出谁是裁判,裁判有多少个?若只有一个裁判,问在进行了多少次对决以后就能判断出裁判是谁。解法:首先,判断出裁判的方法是,若1,2,3号选手的结果出现了矛盾,则1,2,3号中必有一个人是裁判, (1)这个时候如果3,4号的对决结果出现矛盾,则判定3为裁判,然后还需要验证(即如果3为裁判,其他对决结果是不是不会有矛盾); (2)这个时候如果... 阅读全文
posted @ 2013-11-29 00:21 Plumrain 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 题意:有两种人,一种人只会说真话,另一种人只会说假话。只会说真话的人有p1个,另一种人有p2个。给出m个指令,每个指令为a b yes/no,意思是,如果为yes,a说b是只说真话的人,如果为no,a说b是只说假话的人。注意,a可以为b。保证每个指令都是正确的,且相互之间不矛盾。问,能不能确定哪些人是说真话的人,如果能,输出所有只说真话的人;如果不能,输出no。解法:首先,用并查集建树,每个节点有两个参数,f和r,f表示父亲节点的编号,r表示与父亲节点是不是同一种人。r为0表示该节点与父亲节点是一种人,r为1表示该节点与父亲节点不是一种人。则用并查集处理之后,就可以分为k棵树,每棵树上可能有x 阅读全文
posted @ 2013-11-28 14:58 Plumrain 阅读(451) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 13 下一页