DFS
cyl纤云弄巧
To Be
展开
-
POJ 2386 (简单深搜,求连通区域)
http://poj.org/problem?id=2386题意:下雨后广场出现有雨水的区域,求有多少个。思路:很明显,简单递归。每次找到W就把和它相连的W都改成 " . "就可以了。#include#includeusing namespace std;int n,m;char gragh[105][105];void dfs(int x,int原创 2016-08-22 23:16:01 · 480 阅读 · 0 评论 -
POJ 3083 (bfs + dfs)
Children of the Candy Corn Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13904 Accepted: 6014Description The cornfield maze is a popular Halloween treat. Visitors are shown原创 2017-06-28 21:24:12 · 359 阅读 · 0 评论 -
HDU 6105 博弈 ? 都是思维
博弈 ? 都是思维题意: Alice和Bob玩一个游戏,喷漆!现在有一棵树上边的节点最开始都没有被染色。 游戏规则:1. Alice和Bob只能选择未被染色的节点染色,Alice染色成白色,Bob为黑色2. Alice最先开始3. Bob有k次机会可以把树上的线段剪断4. 最后树上有白色Alice胜利,否则是Bob胜利思路: 先考虑Alice胜利的情况:Alice如果胜利原创 2017-08-11 18:48:39 · 442 阅读 · 0 评论 -
HDU 6178 深搜。。。
深搜。。。题意: 有一棵有n个节点的树,现在要去掉多余的边,但是要保证k个特殊节点至少两两连接,问最后可以剩下多少条边。思路: 为了保证特殊的节点,最完美的状态时k条边都两两连接,那么会使用k/2条边,(奇数的情况需要加1)。当然如果树中没有那么多的两两连接的边,就会要多用一些边,也就是剩下多少特殊边就要用多少边。所以问题就是找到这样的两两边有多少。为了找出最多的两两边,要从儿子回溯,很原创 2017-08-25 19:52:49 · 448 阅读 · 0 评论 -
知道前序序列和后序序列求二叉树的个数+大数
知道前序序列和后序序列求二叉树的个数+大数题意: 给出一个二叉树的前序遍历和后序遍历,问有多少个满足这样结构的二叉树?思路: 直接画一个最简单的二叉树,比如根节点恰好只有一个儿子,那么写出前序遍历和后序遍历会发现,根据两个遍历结构无法判断二叉树根节点的儿子是左儿子还是右儿子,那么其实只要找出这样的结构有多少个就行了,那么答案就是2的多少次方。#include <iostream>#in原创 2017-09-09 09:16:28 · 1445 阅读 · 0 评论 -
Codeforces Round #411 (Div. 2) E - Ice cream coloring
E - Ice cream coloring题意: 有一棵树T,节点为1~n,现在有m种ice cream,每一个节点都有si种ice cream,现在新建一棵树G,节点为ice cream 的种类数,标号为1~m,边是否相连有如下规则: if and only if there exists a vertex in T that has both the v-th and the u原创 2017-10-11 22:19:10 · 295 阅读 · 0 评论 -
D - Weird journey
D - Weird journey题意: n个城市,m条路,现在要找出这样的路:经过m-2条路两次,其它两条路经过一次。 问:有多少这样的路径。思路:一定要看清楚题。 根据题意发现类似于欧拉图,根据欧拉图的定义只有满足两个条件的才能画出图, 不妨把经过两次的边转化为欧拉图,根据欧拉图“一笔画”性质,可以得出肯定是相邻边,并且无论相邻节点的度是多少都能连城欧拉路,所以目的就是找出原创 2017-10-13 21:37:16 · 328 阅读 · 0 评论 -
HDU 5438拓扑+bfs或者dfs
HDU 5438题意: 有个人有p个池塘,每一个池塘有其价值,池塘之间有连接的管道,现在主人由于资金的问题,需要抛弃一些池塘,其特点是与之相邻的池塘只有一个,当然如果删除了一个池塘之后剩下的池塘仍然有类似的池塘还要接着删除。 删除之后,问连通图中池塘的个数为奇数个的连通图所有池塘的价值和。思路: 记录每一个池塘所连接的边,其实也就是入度,此题的边是双向的,所以直接记录即可。原创 2017-11-30 21:48:33 · 306 阅读 · 0 评论 -
Gym 101617Jbfs+优先队列
Gym 101617J题意: n个金矿,每一个金矿都有一个初始值代表第一天里面所含的金子数量,每天减少di,现在从金矿1出发,问最多能获得多少金子。思路: 用bfs的方式思考,对于每一个状态就是沿着路径暴力搜索,利用bfs层的思想,对于采金矿的时间也是合理的,但是这样会超时,所以需要用到优化。1. 对于时间有一个最大的时间,可以通过输入算出2. 对于某一个金矿的到达存在不同的方式,记录原创 2017-12-15 17:49:28 · 416 阅读 · 0 评论 -
Hrbust 1143 (bfs)
题意: 给出n*m的矩形地图,从一个原点出发找出小于等于原点的个数。思路: 其实可以用深搜去写这道题,不过可以练习一下bfs的写题思路,注意点就是原点 的判断(check)和细节,比如我经常把s,t写错。#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace s原创 2017-04-19 10:23:58 · 492 阅读 · 0 评论 -
POJ 1129 (dfs)
题意 思路 基本涂色问题:这里给出字母A~Z和每个字母相邻的字母,问最少需要需要多少要颜色才能满足 思路是:dfs,要注意的是每次dfs是做什么的,要有明确的目的才不会出错。#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int M = 30;int isfind;in原创 2017-03-04 13:20:51 · 295 阅读 · 0 评论 -
POJ3050(dfs)
题意: 从任何一个数字出发上下左右找到六个数所组成的数,问有多少个。5*5的方格。思路: dfs暴力搜索,注意条件就行。#include<iostream>#include<cstdio>#include<set>using namespace std;int a[10][10];int ans[10000],pos,t;int dir[4][2] = {{1,0},{-1,0}原创 2016-12-05 18:41:41 · 299 阅读 · 0 评论 -
POJ 2362(DFS)
POJ2362题意:给定各个长度,问能否组成正方形。DFS:现在看来重要的是思想,像一个问题要分步去思考。 1:正方形边长大于4,总长除以4余数0 2:最大边长不能大于总长除以4 3:查找边长需要从大向小查找,需要排序,且查找到3个满足边长就成功。//#include#includeusing namespace std;int stick原创 2016-08-15 09:59:11 · 366 阅读 · 0 评论 -
HDU 1010 (入门搜索)
理解dfs:结点的层层深入回溯入口条件出口条件“`includeincludeincludeusing namespace std;char map[10][10]; int n,m,step; int di,dj; int flag; int dir[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};void dfs(int si,int sj,int t)原创 2016-10-10 15:35:52 · 320 阅读 · 0 评论 -
POJ 2531 (简单dfs)
dfs一直不知道怎么写,可还是要练习。这道题题意:n台电脑,分成两个集合,不同的集合交流需要时间,求最大的时间。思想:遍历全部可能,最开始可以把所有电脑看作一个集合,然后一个一个移动到另个集合,试着找到最大时间,dfs最是适合。#include<cstdio>#include<cstring>int map[30][30];int visit[30];int ans,n;void dfs(in原创 2016-10-11 23:51:11 · 550 阅读 · 0 评论 -
POJ 2718(STL全排列)
全排列算法很多。之前不了解。仅仅知道枚举算法。现在要学习dfs。那么全排列可以用递归实现。但是写题过程中发现了C++之中有实现全排列的STL: next_permutation.结合sort()函数和do{}while();循环使用。 POJ2718 题意:给出一组数字。把数字分成两组,各代表一个新的数字,求出两个数最小差值。#include#include#i原创 2016-11-06 15:51:55 · 339 阅读 · 0 评论 -
POJ 1014(dfs)
题意:有六种大理石分别是1,2,3,4,5,6,代表其价值。现在给你每一种的数量。问你是否能分成平均两半。很明显要用搜索,刚刚开始我竟想的很简单用普通方法写,突然明白不是简单的从小加到一半。dfs可以遍历所有情况。如果某一种情况不行就回溯回来。我写完之后一直超时。后来发现多了一步。a[i]++,其实现在想了不能再自加恢复原来了,因为每一种情况dfs又会在一个for循环中遍历很多情况如果某一种情原创 2016-11-07 19:37:43 · 419 阅读 · 0 评论 -
POJ 1321(dfs)
题意:http://poj.org/problem?id=1321 汉语题。思路:每一种情况要遍历。所以需要搜索,而dfs需要简化步骤。 1. 每一行遍历,避免重复。 2. 考虑出现n > k的情况。 3. 思路需要理清。/* dfs回味无穷*/#include#include#includeusi原创 2016-11-07 20:39:51 · 255 阅读 · 0 评论 -
POJ1256 && 1979 深搜入门
简单题,经典题:POJ1526 UVA5712#include#include#define M 105char pic[M][M];int m,n,idx[M][M];void DFS(int r,int c,int id){ if(r = m || c = n) return ; //边界处理 if(idx[r][c] > 0 || pic[r][c]原创 2016-08-05 17:20:23 · 796 阅读 · 0 评论 -
POJ3009 dfs
题意: 给一个图,1表示石头,2表示出发点,3表示终点,求从2到3的最短步数。 有特殊条件就是在没有遇到1之前,只能一个方向走,遇到1之后1变为零, 然后可以在之前的状态向四个方向走。思路: 1.dfs重要的是入口和出口的控制条件。 2.想好一个位置的状态以及怎么处理它。#include<cstdio>int n,m;int gragh[30][30];int sx原创 2016-12-01 16:59:10 · 331 阅读 · 0 评论 -
Gym 101617H dfs + 离散化 + 枚举
Gym 101617H题意: 有n个房间,m个门,k个桥,每一个门只允许特殊范围编号的人通过,问从出发点s到t可以有多少人通过。思路: 读完题发现k没有什么作用。。 对于这样的题在比赛的时候并没有读,太菜!从答案来看求的人数,通过题意可以发现这必然是一个连续的区间,左右端点不知道的情况下很难暴力,也无法枚举答案,因为很难验证。 正解很巧妙,对于答案所在的区间必然是存在于某几个原创 2017-12-17 16:38:59 · 348 阅读 · 0 评论