07 2012 档案

摘要:题意:给出一个树,每个树枝上都有一个苹果,给出N-1个树枝间的关系,然后给出M个操作,C表示树枝上原来有苹果的摘掉,没有的长出一个苹果,Q表示以这个树枝为根的所有子树的苹果树。思路:这题的关键就是怎样将树上的各点映射到数组,先通过题目给出的条件建树,注意这题没有说是二叉树,可以用链表的方式建树,然后后序遍历这棵树,同时给各个树枝重新编号,是根的编号总是大于子树编号,然后在更新和查询这个子树时,就可以通过树状数组来实现了。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h># 阅读全文
posted @ 2012-07-31 09:44 Misty_1 阅读(219) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个N*M的矩形,每个小矩形里有的有一定数量的矿物,有的有传输的功能,有的不能通过,每个小矩形里的矿物只能采集一次,问你最多能过采集多少的矿物。思路:强连通分支+spfa,先求出强连通分支,在强连通分支中,所以点都是可达的,然后进行缩点,将每一个连通分支看做一个点,而这个点的矿物容量就是这个强连通分支中所有点的和,然后在用一下spfa求最大的矿物量。PS:因为没注意一个循环的长度,导致我查了一个下午加一个晚上,泪~~,细心!细心啊!代码:View Code #include <stdio.h>#include <stdlib.h>#include <st 阅读全文
posted @ 2012-07-30 16:57 Misty_1 阅读(231) 评论(0) 推荐(1) 编辑
摘要:题意:有N只虫子和M个配对关系,问是否有两个虫子是同性的。思路:这题和1703题很相似,也是判断两个虫子是否在一个集合中,稍微一改上一题的代码就行了。1、输入两个虫子的编号,先判断这两个虫子是否是在一个集合,若是,直接标记。2、若不是,判断一下这两只虫子在上面是否给出了配对关系,若没有,则它的相反数组就记录这组数据中它的相反虫子的编号。3、若已经给出,则直接将它们相反虫子的编号连接起来。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostr 阅读全文
posted @ 2012-07-30 15:29 Misty_1 阅读(208) 评论(0) 推荐(0) 编辑
摘要:题意:有N个人,属于两个不同的帮派,给出一定的条件,让你判断这两个人是否属于同一帮派。思路:刚开始知道要用到并查集,但读懂题意后又觉得有点小麻烦,比如说给出D 1 2 ,D 3 4 ,怎样确定到底是1,3 在同一帮派,还是1,4在同一帮派,想先将所有人放在一起,然后判断出了两人属于不同帮派就分出来,但是这样依然不好处理上面那个问题,想来想去,还是没有好的想法,参考了一下别人的思路,豁然开朗。其实何必纠结到底是那两个人一个帮派呢,只要知道1和2 是不同帮派就行了,开一个数组,专门用来存X的相反帮派的序号,如果以前没有提供X的相反的人,那就置为0,如果已经知道X的相反人的序号,就把它与Y相连,以此 阅读全文
posted @ 2012-07-30 10:57 Misty_1 阅读(192) 评论(0) 推荐(0) 编辑
摘要:题意:有N头牛,选出最受欢迎的牛,其中有M对A B,表示牛A认为牛B比较受欢迎,问你有多少牛最受欢迎。在学习强连通分支的Tarjan算法是,好多人提到这题时比较经典的强连通分支题,所以拿来练手了,熟悉一下Tarjan算法的实现过程。学习过程中还发现一篇讲解Tarjian算法很好的Blog,其中有图一步一步的讲解了Tarjan实现的过程,http://www.byvoid.com/blog/scc-tarjan/代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#inclu 阅读全文
posted @ 2012-07-28 21:31 Misty_1 阅读(129) 评论(0) 推荐(0) 编辑
摘要:嗯,不得不承认自己做题真的太不用心了,不去想实现的细节,总是错在细节,不能怨别人不相信自己,是自己不够让别人相信,代码能力差是一回事,但用不用心是另一回事~好好检讨一下自己。题意:给出N个电力传输点,电力每经过一个点会损耗一定电力,让你找出一条损耗电力最小的路;思路:题目中的数据范围很大,要用邻接表存储边,用队列搜索比较快。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include 阅读全文
posted @ 2012-07-27 09:39 Misty_1 阅读(183) 评论(1) 推荐(0) 编辑
摘要:题意:给出N的商店,M个仓库,K种物品,从这M个仓库给这N个商店供货,每条船有一定的载重量,商店和仓库间每一单元距离花费一定钱,求载货量最大而花费最小的情况。思路:典型的最小费用最大流,虽然是第一次做这样的题,但在昨天好好又把求最大流的方法看了一遍,所以感觉做这题不是很难,但是题目中的输入很让人纠结,建图建了很久。首先判断是否需求大于供应,如果是就直接输出-1,如果不是,直接用spfa求最小费用,将每种货物的最小花费加起来就是了。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#inclu 阅读全文
posted @ 2012-07-25 11:37 Misty_1 阅读(145) 评论(0) 推荐(0) 编辑
摘要:从开始学习差分约束到现在也应经做过几道题了,但是在做这道题的时候突然就不知道差分约束到底是来干嘛的了,很郁闷,用重新看了一遍《算法导论》上的讲解,然后有浏览了一下自己做过的题,终于是明白了那么点~~其实说到底,差分约束就是给你N个不等式,让你求一下是不是有一组N维的矩阵使这些不等式都成立,而这个N维矩阵是不确定,所以所有的差分约束题不是让你判断是否可能实现,就是让你求出xn-xi的最大值,最小值什么的,从来不会让你求出符合要求的一组解,或许会有,是我还没做到,而之所以要用求最短路的各种方法来求解就是因为要求解的不等式形式和最短路中的不等式形式相识,所以那些方法既然能求最短路,自然能求这些不等式 阅读全文
posted @ 2012-07-23 11:15 Misty_1 阅读(205) 评论(0) 推荐(0) 编辑
摘要:题意:有一包糖果,分给N个孩子,有些孩子可以比另一些孩子多,但是不能躲过ci个,给出m对 A B ci,意思是孩子B比孩子A多不超过ci个。思路:其实就是一道裸差分约束,但是这题卡时间,看了discuss里的讨论,说是边比点多,用Dij比较快,又看了一下点的数据范围,果断用了数组模拟的邻接表,然后。。。。。就AC还有一点就是如果要把一个数初始化为无穷大,最好是INF=100000000 ,而不要INF=0xffff,因为后面一种INF的值为65536,有时不够大。。。代码:#include <stdio.h>#include <string.h>#include < 阅读全文
posted @ 2012-07-22 11:13 Misty_1 阅读(139) 评论(0) 推荐(0) 编辑
摘要:啊!啊!啊!快要哭了,调了一下午加一晚上,怎么也找不出错误,感觉自己理解的也没错,怎么就是不对呢,在我要崩溃的时候终于AC了,原因竟然是因为判断条件没用函数,真的崩溃了!!题意:给出N个点,有些点的位置是清晰的, 有些点的位置不清楚,只知道点A在点B的北面,清晰的点有两点间的距离, 不清晰的点只知道两点的距离不小于1。思路:这题时用差分约束做的,刚开始接触差分约束,知道要先找到不等式,但这题里有些是等式,要先转化成不等式,即 c<= dis[i] + dis[j] <= c ;不清晰的点有不等式d[i] + d[j] >= 1;然后直接用差分约束模板就解决了!我是用的SPFA 阅读全文
posted @ 2012-07-21 20:29 Misty_1 阅读(161) 评论(0) 推荐(0) 编辑
摘要:呃,这是我做的第一道差分约束题,想先谈谈我对差分约束的理解,由于本人能力有限,可能理解有点浅显。如果您已看过相关讲解,请无视之。。。。1、想看的是百度百科和维基百科上对差分约束的的定义,上面都举了同一个例子,就是,寻找一个5个向量x=(xi)以满足下列8个差分约束条件:x1-x2≤0 ,x1-x5≤-1 ,x2-x5≤1 ,x3-x1≤5 ,x4-x1≤4 ,x4-x3≤-1 ,x5-x3≤-3 ,x5-x4≤-3然后讲了用Bellman_ford求最短路的方法来实现差分约束。2、然后,看了这道题,本以为会是一道裸的差分约束题,想了一会,很是没思路,很没“骨气”的查了解题报告,结果又了解了一点 阅读全文
posted @ 2012-07-21 11:27 Misty_1 阅读(236) 评论(0) 推荐(0) 编辑
摘要:通过这题有学习了关于求凸多边形的直径的方法,真的很巧妙~旋转卡壳可以用于求凸包的直径、宽度,两个不相交凸包间的最大距离和最小距离等,参考了下面的两个博客,原理基本上明白了。留下链接,以便后面复习用~http://www.cnblogs.com/Booble/archive/2011/04/03/2004865.htmlhttp://www.cppblog.com/staryjy/archive/2009/11/19/101412.html其实这题完全可以不用旋转卡壳,可能是后台数据量很小,直接用暴力求解也可以过,而且时间和用了旋转卡壳的时间相差无几。不用旋转卡壳(125ms)#include 阅读全文
posted @ 2012-07-18 15:15 Misty_1 阅读(216) 评论(0) 推荐(0) 编辑
摘要:据说这题是经典的凸包题,可以直接套模板,由于刚开始看凸包,因此以它为例题,熟悉一下凸包模板~点集Q的凸包是一个最小的凸多边形P,满足Q中的每个点或者在P的边界上,或者在P的内部,通俗点讲就是,一块木板上有许多铁钉,而凸包就是要求包围了所有这些铁钉的一条拉紧了的橡皮绳所构成的形状。求凸包的一种比较常用的方法的Graham扫描法,其步骤为:步骤1:以y轴最低点为基点,找到基点p0。步骤2:以基点p0为一个坐标系的远点,求各点与基点p0的极角,并一次从小到大排序步骤3:按照顺序,每个点都要判断与其前面的点构成的两条线段转向问题(左转还是右转?用叉积判断)。步骤4:依次下去,知道所有的点结束,就完成的 阅读全文
posted @ 2012-07-17 20:14 Misty_1 阅读(194) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个多边形和每个点的坐标,以及一个圆的圆心坐标和半径,让你判断该园能否放入这个多边形中。思路:先判断该多边形是否是凸多边形,由于给出多边形的坐标可能是顺时针方向也可能是逆时针方向,所以判断时分两种情况,如果是凸多边形,在判断该圆的圆心是否在多边形内部,这也可以用叉乘来判断,最后判断圆心到边的距离是否都大于圆的半径。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include 阅读全文
posted @ 2012-07-17 11:37 Misty_1 阅读(172) 评论(0) 推荐(0) 编辑
摘要:题意:给出一个1*1的正方形,每条边上都有n个点,由对边上的点连成的线段将正方形分成(n+1)*2个不规则四边形,求其中面积最大的面积。思路:利用叉积求出所有焦点,然后用叉积求四边形面积求的所有的面积找最大的一个~代码:#include <stdio.h>#include <string.h>#include <iostream>#define N 34using namespace std;struct node{ double x , y ;}p[N][N] ;int n ;//叉积求交点struct node point ( struct node p 阅读全文
posted @ 2012-07-17 09:11 Misty_1 阅读(165) 评论(0) 推荐(0) 编辑
摘要:前两天做了北航上的一道大整数数,顺便复习一下大整数的运算~http://www.bianchengla.com/oj/1/practise/problem?id=1001#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <string>#include <algorithm>using namespace std ;int f ;class node{private: static int COMPARE( 阅读全文
posted @ 2012-07-14 10:58 Misty_1 阅读(166) 评论(0) 推荐(0) 编辑
摘要:颓废了几天,开始努力~题意:给出N个球体的球新坐标以及球的半径,让你求出连接这N个球的最短的隧道距离,其中相接触和相覆盖的两个球之间不由隧道。思路:最小生成树,刚开始的想法是kruskal,但是看了discuss里的讨论,说prim更快些,所以就用了prim,不用排序的确更容易些。代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>#include <math.h>#define 阅读全文
posted @ 2012-07-13 11:49 Misty_1 阅读(238) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示