摘要: 题意:给出一个N*M的矩形,每个小矩形里有的有一定数量的矿物,有的有传输的功能,有的不能通过,每个小矩形里的矿物只能采集一次,问你最多能过采集多少的矿物。思路:强连通分支+spfa,先求出强连通分支,在强连通分支中,所以点都是可达的,然后进行缩点,将每一个连通分支看做一个点,而这个点的矿物容量就是这个强连通分支中所有点的和,然后在用一下spfa求最大的矿物量。PS:因为没注意一个循环的长度,导致我查了一个下午加一个晚上,泪~~,细心!细心啊!代码:View Code #include <stdio.h>#include <stdlib.h>#include <st 阅读全文
posted @ 2012-07-30 16:57 Misty_1 阅读(238) 评论(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 阅读(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)