DFS
分享关于搜索的题解
MangataTS
一个爱折腾的Coder
展开
-
L2-016 愿天下有情人都是失散多年的兄妹(DFS)
题目链接https://pintia.cn/problem-sets/994805046380707840/problems/994805061769609216思路我们把这个家族关系看成一颗二叉树,树的根节点是子元素,“左儿子” 是父亲,“右儿子” 是母亲,然后我们定义 isman[i]isman[i]isman[i] 如果为 true 表示编号为id 的性别为男,反之为女,然后我们每次输入一行数据就连边,起点是当前编号,终点是父母编号(存在的话),然后我们在Q 次询问的时候,首先判断两个编号是否为原创 2022-04-05 00:04:16 · 1096 阅读 · 0 评论 -
L2-013 红色警报(DFS+染色)
题目链接https://pintia.cn/problem-sets/994805046380707840/problems/994805063963230208思路对于每一个城市我们都有一个over 标记 over[i]=true表示的是第 iii 个城市已经被攻占下了,对于每一个城市被攻占后我们就将其标为true并且将其所有联通的城市全都标记为true(其实就是一个图的遍历),然后每次我们拿攻占前和攻占后的连通块的数量进行对比,如果发现连通块的数量增大了(除去被攻占的这个城市),那么说明国家被分割原创 2022-04-03 14:47:58 · 799 阅读 · 0 评论 -
AcWing 846. 树的重心(DFS)
题目链接https://www.acwing.com/problem/content/848/思路思路大概是,我们对树上的每个点去算一下它的所有子树的情况,然后再和去除以当前节点为根的子树就是剩下的连通块的大小了,然后我们用一个res值记录这个连通块的大小,然后全局定义一个ans,初始化为比较大的数,然后每次搜到一个点,那么我们就更新一下最大连通块的最小值即可,详情请看代码,建图是使用的链式前向星代码#include<bits/stdc++.h>using namespace std原创 2022-02-08 23:42:02 · 296 阅读 · 0 评论 -
AcWing 1929. 镜子田地(DFS)
题面连接https://www.acwing.com/problem/content/description/1931/思路因为光路可逆,那么对于每一个点的方向就是固定的,也就是入射角和反射角,那么对于每一个点的走向我们都是可以提前预知的,所以我们直接对每个外圈点进行DFS搜索即可,只不过需要注意一点我们要有一个变量d来表示朝向,因为光在不同的方向入射,那么其出射方向也不同,我们这里用0表示向上、1表示向右、2表示向下、3表示向左,那么我们会发现,如果下一个点是 '/'的话入射方向是0那么出射方向原创 2022-02-06 20:46:25 · 186 阅读 · 0 评论 -
Oil Deposits(油田问题)
题意:找出地图上的油层数,每个油层由多个油藏组成,这些油藏相邻,常规的搜索问题,每次向八个方向搜寻油藏。题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241友情链接:点这里。 此处为DFS代码:#include<stdio.h>#include<queue>#include<iostream>...原创 2020-01-22 20:32:00 · 1401 阅读 · 1 评论 -
AcWing 843. n-皇后问题(DFS)
题目链接https://www.acwing.com/problem/content/description/845/思路我们每一层只需要搜一个,然后判断一下这一层的这个点的列、左斜线、右斜线是否被搜过,如果没有被搜过那么就往下搜,然后归的过程记得回溯,最后搜到第N层的时候就直接输出这种情况即可#include<bits/stdc++.h>using namespace std;//----------------自定义部分----------------#define ll lo原创 2022-01-25 20:34:54 · 307 阅读 · 0 评论 -
AcWing 842. 排列数字(DFS)
题目链接https://www.acwing.com/problem/content/description/844/思路回溯搜索即可代码#include<bits/stdc++.h>using namespace std;//----------------自定义部分----------------#define ll long long#define mod 1000000007#define endl "\n"#define PII pair<int,int&g原创 2022-01-25 20:34:12 · 187 阅读 · 0 评论 -
AcWing 2005. 马蹄铁(DFS)
题目链接https://www.acwing.com/problem/content/2007/思路由于这个题目数据范围很小,所以我们可以进行暴力搜索,从左上角1,1点开始回溯搜索,注意的是,由于要形成题目中括号的格式,所以我们能发现左括号能走到左括号或者右括号,而右括号只能走到右括号代码#include<bits/stdc++.h>using namespace std;#define ll long long#define mod 1000000009ll ksm(ll a原创 2022-01-26 23:26:43 · 195 阅读 · 0 评论 -
AcWing 2060. 奶牛选美(DFS)
题目链接https://www.acwing.com/problem/content/2062/思路先DFS染色,将这两部分分开,分别用1和2标记,然后对于第一堆的每个元素直接用BFS跑一个最短路即可代码#include<bits/stdc++.h>using namespace std;#define endl "\n"const int N = 100;char mp[N][N];int a[N][N];int n,m;int dx[4]={-1,1,0,0};原创 2022-01-25 20:48:09 · 354 阅读 · 0 评论 -
T^T找数字(搜索+二进制枚举)
题目链接:传送门解题思路:看一眼n的大小,发现只有20,所以我们可以用决策搜索,或者二进制枚举解决,用搜索做法则需要判断第i个位置是否选取,然后当前的总和是多少,其实用二进制枚举也是这样做的,我们判断当前这个数是否选取,然后每次选取从1到n判断是否选取完成后,把选取的和与k进行比较,如果相等则直接按照给定选取的序列的顺序输出就行。其实两种做法的原理,或者说思路都是一样的。时间复杂度均为\(O(...原创 2021-01-19 10:21:00 · 169 阅读 · 1 评论