随笔分类 -  最小生成树

摘要:题意:有N台电脑,它们之间可以相连的线路由M条,现在让你求将所有电脑连起来的所有方案中,哪个方案中最长的一段线路最短。其实这题和poj的2253有些类似,刚开始的时候我甚至就改了改那题的代码交上去,结果WA了,后来又看了一遍样例,这题要求的是将所有电脑都连起来,也就是说,符合要求的方案必须是包含所有电脑的,这和2253不同,2253只是求从起点到终点的一条路,而这题是求最小生成树的,我用的是Kruskal,还有,虽然题目中没说,但这题是multiple answers。代码:View Code #include <stdio.h>#include <stdlib.h># 阅读全文
posted @ 2013-03-09 10:13 Misty_1 阅读(266) 评论(0) 推荐(0)
摘要:题意:windy要组建一支军队,召集了N个女孩和M个男孩,每个人要付10000RMB,但是如果一个女孩和一个男孩有关系d的,且已经付给了其中一个人的钱,那么就可以付给另一个人10000-d元,求windy最少要付多少钱。解题过程:写了一个prim的最小生成树才发现原来整个图不是连通的,所以想到用Kruskal,刚开始的时候val中存的是10000-d,然后求最小生成树,但是最后求有几棵树的时候不是很好计算,改了一下f[x]、f[y]的赋值规则还是不行,然后看到有人说求最大生成树,然后就改了一下条件就AC了。代码:View Code #include <stdio.h>#includ 阅读全文
posted @ 2012-10-25 16:22 Misty_1 阅读(1171) 评论(0) 推荐(0)
摘要:题意:给出N个正常的机器人,还有一个感染病毒的机器人,从这台机器人开始传播病毒,当传染到一个机器人,这个机器人也开始加入传播的行列,向其他正常的机器人传播,问最少的时间。解题过程:这题说难其实不难,也很容易就能想到用最小生成树,就是对BFS搜索算法的不熟,导致在建立连接的时候有些麻烦。这题先用BFS计算出任意两点之间的距离,然后用prim算最小生成树就行了。代码:View Code #include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include 阅读全文
posted @ 2012-10-25 16:12 Misty_1 阅读(154) 评论(0) 推荐(0)
摘要:题意:有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 阅读(216) 评论(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 阅读(199) 评论(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 阅读(246) 评论(0) 推荐(0)
摘要:题目意思:给你若干棵树,问你每种树出现的概率;解题思路:(1)trie树 ,不过这题的输出很让人纠结,它是按ACSII表的顺序输出的,本以为大小写字母再加上一个空格,开53个数组就够了,但是不幸的WA了, 后来看了别人的解题报告,直接开到了95,改了一下就过了~(2)stl的map容器。不过这个很慢,可以过,但是没法很trie树的比,一个700+ms,一个3000+ms。呃,第一次用map,权当练练手。trie树:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iost 阅读全文
posted @ 2012-05-31 17:49 Misty_1 阅读(182) 评论(0) 推荐(0)
摘要:很好的一道题,用到了欧拉图的定义。呃,说实话,大一学的那点关于欧拉图的知识忘得都差不多了,虽然还记得欧拉图,但根本不知道怎么用,怎么判断,记得有次比赛有道题和它很像,当时根本不知道要用什么知识来解决,只是简单的假设着,今天读到这题时,直觉上觉得应该简单的方法,训练计划又提示用trie树,所以认真的推了一个结论,只有当每种颜色的数目都为偶数,或者只有两种颜色的数目为奇数其他的都为偶数时才能完成匹配,当时没想到是欧拉图,所以就按着自己的想法这样做了,可是不对,觉得应该是少了点什么,上网一查才知道这题是用欧拉图,然后又看了一下欧拉图的定义,汗~~再来说说这道题,题目的意思是,给你一堆木棒,每个木棒的 阅读全文
posted @ 2012-05-27 21:00 Misty_1 阅读(223) 评论(0) 推荐(0)