06 2012 档案

摘要:题意:一些公司共同拥有一个具有n个顶点的网络,给出了有关于这个网络的信息,即边<i,j>以及与这条边相连的公司,现在题目给出一条路径的起点和终点,要求求出这条路径经过哪些公司. 很容易想到求图的传递闭包,而这里两点之间可能有多条线路,之前对每个字母(也就是每个公司)单独来进行一遍Floyd,结果超时了,这里输入的公司标志为不同的小写字母,最多只有26个,所以我们可以根据位运算来进行优化。floyd + 位运算考虑到相邻两条边都被一个公司拥有当且仅当两条边上都有该公司对应的字母,位运算&能有获得两个公司的公共位,新边并上(|)这个结果就表示新边所属的公司View Code #incl 阅读全文
posted @ 2012-06-30 20:57 lenohoo 阅读(216) 评论(0) 推荐(0)
摘要:dfs题意:已知起点和终点,求石子从起点到达终点的最短路,如果无法到达,则输出-1。石子移动的具体规则如下: 1、开始时,石子在起点s处 2、运动方向可以是水平或垂直的,不能斜方向运动 3、最开始的时候,你可以将石子向上下左右任意一个方向抛,如果与它相邻的点是障碍物的话除外 4、一旦石子开始运动,有三种可能: a、遇到障碍物,石子会停在障碍物的前一格,障碍物会消失 b、如果出界,游戏失败 c、到达终点,游戏结束并成功 5、如果移动的次数超过10次,将认为游戏是失败的把考虑的情况放进去就行了View Code #include <cstdio>#include ... 阅读全文
posted @ 2012-06-30 18:26 lenohoo 阅读(158) 评论(0) 推荐(0)
摘要:双重bfs: 在推箱子游戏中人推箱子只有两种情况: 人推箱子:那么箱子此时所处的位置就是人接下来会到达的位置 人找位子推箱子:那么人就要到达箱子下一步到达位子对应的相反方向得那一个格子 所以,主干是箱子的移动过程,箱子每移动一步就对接下来人所处的位子进行考虑。也就是在一次bfs的过程中不断套用另一个bfsView Code #include <cstdio>#include <cstring>#include <iostream>#include <string>#include <queue>using namespace std; 阅读全文
posted @ 2012-06-30 15:47 lenohoo 阅读(528) 评论(1) 推荐(0)
摘要:floodfill算法 建立一个队列Q。初始时,Q仅包含最开始的那个“点”,对于每个出队的元素,把他周围需要扩散到的元素加到队列中。为了避免重复访问,需要记录每个元素是否已经访问过,即访问标志。他是一种很常用的预处理方法,当“连在一起很大一块东西可以一并处理”的时候,可以作一次floodfill,分离出一个个“连在一起”的块,然后再做处理。对于本题,经验告诉我们,“一个桶最大的容量取决于它最短的那块板”。所以我们先对周围的一圈格子进行访问,并取其中最短具有最短长度的格子,将其加入队列中。然后进行floodfill,搜索到没有被访问过的并且高度更低的格子即将当前访问的格子与刚出队的元素的高度差加 阅读全文
posted @ 2012-06-27 02:28 lenohoo 阅读(492) 评论(0) 推荐(0)
摘要:大家都知道贝贝侠喜欢小龙女MM,但是不幸的是小龙女MM现在被可恶的Segmen大魔头给抓走了,小龙女的爸爸海龙王自是伤心不已,但是最着急的还是贝贝侠,但是贝贝侠跑的没有Segmen大魔头快呀,这可怎木办?也许最好的办法就是学会线段树,这样就能增长指数的速度,救会小龙女MM了。线段树是一种类型的二叉搜索树,不同的是他的每一个节点保留的是一段的信息,就是一个线段的左右端点,这样,通过反馈,更新,就能把某个端点的左右儿子的信息和并到其自身上面去,从而将其左右儿子包含的两个连续的线段和并成其自身的一个线段,从而实现其自身信息的更新。首先是建树build(int l,int r,int rt)的过程:如 阅读全文
posted @ 2012-06-27 01:30 lenohoo 阅读(650) 评论(0) 推荐(0)
摘要:贝贝侠 贝贝侠来自遥远的贝贝山,那是一个美丽的地方 后来贝贝侠邂逅了美丽的小龙女MM 但是很不幸的是 东海龙王很快就派虾兵蟹将私逃出东海龙宫的小龙女MM 抓走了。。。。。。 于是贝贝侠就被上了行囊 去远方寻找梦想 和 小龙女MM 路上碰到了很多江湖人物,包括 飞飞侠,吉吉哥,盼盼姐,三石翁,一枝菊,百晓毛,小灵通,小葱葱。。。。。。 好多好多。。。。。。 阅读全文
posted @ 2012-06-27 01:25 lenohoo 阅读(510) 评论(0) 推荐(0)