上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页
摘要: 题意:有一些单词他们之间只要满足A的最后一个字母和B的第一个字母相同。就能建立A.B的关系。然后问你能不能找到把所有单词连成一串且所有单词都出现一次。思路:其实题意就是能不能在一张无向图中找到一条欧拉通路。我们知道在无向图中一张图存在欧拉通路的条件是:(1)所有结点入度=出度或有一个节点入度-出度=1有另一个节点出度-入度=1其他节点入度-出度。(2)当前图是弱连通的。(就是当前图换成有向图是连通的)然后我们在用dfs输出欧拉道路就可以了。至于dfs的过程是这样的每走过一条边就标记它。然后在回溯的时候记录路径。代码如下: 1 /********************************. 阅读全文
posted @ 2014-01-28 16:00 张小豪 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 题意:一个国王要派若干士兵看守王国。王国是一张无向图,然后士兵只能站在点上。每个士兵的看守范围是临近的点与边,士兵看管的的边不能重复。问最少用多少个士兵能使每个点和边都有人看守。思路:这道题可以抽象成二分图,只要一张图满足二分图。结点数少的颜色的和即为最小的士兵数。代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-xiaohao/ 4 * Last modified : 2014-0... 阅读全文
posted @ 2014-01-28 10:24 张小豪 阅读(259) 评论(0) 推荐(0) 编辑
摘要: 题意:给一张无向带权图,让你求总1-n的次短路。思路:好久没写dij了这次敲一边果然敲错了。。。这题就是在dis上加一维dis[i][0]记录最短路dis[i][1]记录次短路。就和我们在一个数组中找最小值次小值的原理差不多。我们只需先更新最小值,更新好了不要忘了再用原来的最小值去更新次小值(我就忘了这个wa了2次)。然后在更新次小值。代码如下: 1 /************************************************** 2 * Author : xiaohao Z 3 * Blog : http://www.cnblogs.com/shu-... 阅读全文
posted @ 2014-01-27 16:07 张小豪 阅读(484) 评论(0) 推荐(0) 编辑
摘要: 题意:在一个方阵中,一个强盗犯要逃跑。你是警察要去抓他,现在你手上有若干线索他们会告诉你第i时刻一个方阵中他们没有看见强盗。在t秒后全部道路会封锁。让你通过线索来判断是不是能够找到小偷在某一秒的位置。思路:最先想到的思路就是记忆化搜索,但是可惜状态想错了,没有成功。然后又尝试了若干种方法都没有成功。最后去看解题报告才明白了。状态信息不唯一需要三维dp[i][j][k]表示在(i,j)t时刻有没有可能出现强盗。然后我们在搜索过程中用ans[i]记录i时刻能出现的位置,最后若是唯一就可以输出。代码如下: 1 /******************************************** 阅读全文
posted @ 2014-01-27 15:02 张小豪 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 题意:有若干种货币他们之间存在汇率,然后你要判断的是你能不能通过交换货币是你手中的一种货币不断的升值。思路:floyd变形Map[i][j] = max(Map[i][j], Map[i][k]*Map[k][j]) 状态表示i交换到j最多能换多少。然后最后统计一下所有自己欢自己是不是有大于1就可以了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define ... 阅读全文
posted @ 2014-01-26 14:10 张小豪 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 题意:有若干个然参加选举,然后会每次挑选来两个人出来选,赢得那个能继续参选,输的就被淘汰了。问你若你是每次挑人的那个人,你很自私能不能让你想赢的那个人赢。思路:对于(a,b)若b能战胜a我们建有向边a->b,最终判断若是所有的节点都能到达你想要的那个人就是可以战胜的。写法类似于floyd。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b... 阅读全文
posted @ 2014-01-26 13:50 张小豪 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题意:给一个方阵表示一个湖每个格子代表那个位置的风向,顺风走不要花费否则花费为1。给你起点重点问你最小花费是多少?思路:这道题写的四不像,先spfa写了一下T,然后bfs又T。接着加了个优先队列就过了。。。主要就是类似于spfa dis数组记录到那点的最小花费。然后只要能更新就入队。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define PB(a) push... 阅读全文
posted @ 2014-01-26 11:47 张小豪 阅读(218) 评论(0) 推荐(0) 编辑
摘要: Problem ABear and Raspberry题意:水题。找前一天减后一天的差值最大。然后大于c就减去c,否则为0.代码如下: 1 //2014-01-24-23.22 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define MP(a, b) make_pair(a, b)14 #define PB(a) push_back(a)15 16 using name... 阅读全文
posted @ 2014-01-25 13:28 张小豪 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一张无向图,然后有若干组询问,让你输出a->b的最小瓶颈路。思路:又是一道最小瓶颈路的题目。以前做过单组询问的,由郭华阳在集训队论文里提到的性质。在单组询问的时候只需要求出kurskal算大过程中第一次将他们合并的边就好了。但是对于这道题的多组询问,我们就不能那么处理了。在郭华阳的论文里讲到了一种方法每次合并时生成一个节点,把待合并的两个集合看成两颗子树,这样最终我们就只要对于询问的两个节点,求出他LCA的权值即可。如图所示。但是这里我所采用的是另一种方法。就是dis[i][j]数组维护的是j号结点到2^i祖先的瓶颈路。这样我们把lca的查询过程稍稍修改一下就可以了。代码如下: 阅读全文
posted @ 2014-01-24 18:33 张小豪 阅读(1150) 评论(0) 推荐(0) 编辑
摘要: 题意:在一张图上有若干点,告诉你每个点的坐标,然后问你从a到b的最小瓶颈路。最小瓶颈路就是找到一条路径上面最大的边最小。思路:原来的想法是先求最小生成树,然后倍增求出答案。这样虽然可以但是比较麻烦,介于这道题是单对询问我们可以找到更简单的做法,郭华阳在国家集训队论文里介绍了最小生成树的性质。就是在kruskal算法执行的时候第一次将两个点连起来的那条边就是最小瓶颈路。一旦明白了让这条性质这题就变得简单多了。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #in... 阅读全文
posted @ 2014-01-23 19:10 张小豪 阅读(954) 评论(0) 推荐(0) 编辑
摘要: 题意:这道题以前在cf上碰见过类似的,虽然比较简单但还是卡了半天,主要是因为题目没读清楚。题意是有n个人 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b) make_pair(a, b)13 #define PB(a) push_back(a)14 15 using namespace std;16 17 typedef long long ll;18 typedef ... 阅读全文
posted @ 2014-01-23 19:01 张小豪 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 中文题就不解释了。简单LCA,就是求第一个点到LCA的距离,在判断第二个点是不是LCA,不是答案再加一就可。至于求距离的话直接利用倍增法的parent数组拆成二进制复杂度为logn。代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b) make_pair(a, b) 13 #define PB(a) push_ba... 阅读全文
posted @ 2014-01-22 15:46 张小豪 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 题意:给你一个树,有若干个询问,然后让你统计每个结点在询问中做了几次LCA。按照结点顺序输出。思路:这也是简单的LCA题目,我用的是倍增法。每次查询在相应结点标记上++,最后输出即可。这道题的输入处理比较烦,而且第一个输入的结点并不是根节点。这要注意一下代码如下: 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b) make_pair(a, b)1... 阅读全文
posted @ 2014-01-22 14:06 张小豪 阅读(470) 评论(0) 推荐(0) 编辑
摘要: 题意:现实给你一棵树然后给你树上的n-1条边,接着给你一对顶点,然后让你求这对顶点的LCA。思路:由于刚刚学习LCA所以找了这一道最最水的LCA题目来做发现用复杂度较高的算法也能过,就是先遍历求出每个结点的父亲和深度,然后再将深度深的向上走,一直走到两个结点在同一高度上。再两个节点一起往上走,直到走到一个节点那么这个节点即为那两个节点的LCA。暴力法代码如下: 1 //LCA 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 ... 阅读全文
posted @ 2014-01-22 12:41 张小豪 阅读(1219) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一些变量告诉你他们之间的表达式包括其中的and or xor 然后让你计算是不是有满足的解。思路:典型的2—SAT问题,首先我是把所有的逻辑表达式化简成->表示然后再a->b之间建立一条边。接着套模版就OK了。代码如下: 1 //2014-01-21-14.47 2 //2-SAT 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #define MP(a, b) make_pair(a, b... 阅读全文
posted @ 2014-01-22 12:35 张小豪 阅读(200) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8 9 10 11 12 ··· 14 下一页