摘要: 题意:在T-1时间内逃出城堡,途中可能会遇到10种门或钥匙,每种门对应一种钥匙。简单的BFS,但是判断一个点能否通过不是简单的判断是否走过,而是判断通过该点时拥有的钥匙的状态是否一致。所以,判重的hash数组要多开一维,表示钥匙的状态。可以用位运算,二进制的10个位分别表示每一种钥匙的状态View Code #include<iostream>#include<algorithm>#include<queue>#define M 21using namespace std;struct node{ int x, y, t, state; node() {} 阅读全文
posted @ 2012-02-24 14:44 枕边梦 阅读(686) 评论(0) 推荐(0) 编辑
摘要: 题意:有 n 个数,你不知道它们的值, 然后又有 m 行数,每行 a ,b ,c,表示 a 到 b 之间所有数的和为c(包含了第a个和第b个数)。但是这m行数里面有些是错的,就是与前面给的条件相冲突的,要求你最后输出错了几行。分析:用并查集,同样,还是需要一个辅助数组r[]记录每一个点跟根节点的关系。首先我们可以把问题稍微转化一下,就是如果已知[3,6],[7,10]俩个区间内各自所有数的和,那么就可以[3,10]内所有数的和,可是,这俩个区间根本就不衔接,所有要稍微处理一下,将左区间值减1,就变成了[2,6],[6,10],这样就方便处理了。既然这样的话,[2,6]区间内所有数的和就完全可以 阅读全文
posted @ 2012-02-24 12:29 枕边梦 阅读(1347) 评论(0) 推荐(1) 编辑
摘要: 大致题意是说:有n个电站,每个电站都有一定的电量,电站之间有一定距离,我们要从0点出发去占领一些电站,使得占领的电站电量之和超过总电量的一半,求达到条件所要走的最短距离。如果可能的话,输出距离,否则输出不可能。我们知道电站都是连通的,只要0点与任何一个电站连通,我们就可以占领所有电站,如果0点不与任何一个电站相连,就是不可能实现,也就是说0点到任何一个电站的距离都是无穷。 我们从0点开始派出一些坦克去占领一些电站,坦克到每个电站都有一定距离,而占领每个电站之后可以得到一定电量,距离就相当于体积,电量就相当于价值,这不是就01背包吗?01背包通常的问法是给定体积,求获得最大的价值,这里的问法是给 阅读全文
posted @ 2012-02-24 01:22 枕边梦 阅读(294) 评论(0) 推荐(0) 编辑