
dfs
Rem_Inory
这个作者很懒,什么都没留下…
展开
-
【题解】洛谷P2279 消防局的设立(dfs/贪心)
这道题虽然在洛谷上归类为动态规划(树形dp),然而思考后我们可以用贪心来解决这个问题。由于我们得到的是一个树形结构,所以我们可以模拟出这么一棵树来,然后通过dfs求出树每一个叶子结点的深度(根节点深度最小为1)。注意用dfs求深度要记录下结点的父亲结点,后面有用。因为消防局可以扑灭和它所在城市距离为2的城市的火灾,所以我们贪心,将求出的最深的节点找到,然后通过fa数组寻找其爷爷结点,并将其标记...原创 2018-07-13 22:13:26 · 389 阅读 · 0 评论 -
【题解】洛谷P1993 小K的农场(差分约束 dfs 最短路)
做多了应该能一眼看出这道题使用差分约束解决。根据1/2/3三个序号所代表的含义建立不等式组,然后我们将符号统一成一个方向跑最短路或者最长路,这里我选择跑最短路。如果出现在图内出现负环就代表不行,而如果用bfs-spfa的话会T几个点,所以改用dfs-spfa来解决。卡着时间过去了#include<cstdio>#include<iostream>#include&...原创 2018-08-23 19:31:44 · 261 阅读 · 0 评论 -
【题解】洛谷P2831 愤怒的小鸟(搜索 状压)
#include<cstdio>#include<iostream>#include<algorithm>#include<cstdlib>#include<cstring>#include<cmath>using namespace std;int t;int m1,m2;struct pig{ do...原创 2018-08-19 21:20:45 · 289 阅读 · 0 评论 -
【题解】洛谷P1433 吃奶酪(dfs)
首先处理出每两个点之间的距离,然后从起点开始遍历所有点,找出最大值即可,注意坐标不一定是整数。。#include<cstdio>#include<iostream>#include<algorithm>#include<cmath>using namespace std;int n;double maxx=1e9;struct p...原创 2018-08-13 21:20:38 · 648 阅读 · 0 评论 -
【题解】洛谷P1434 滑雪(记忆化搜索)
枚举每一个点,从每一个点开始扩展求出每个点的最大长度,最后求最大长度的最大值。这是一般的dfs的想法,在此题中可以得90分。想要通过最后一个点,我们需要使用记忆化搜索。开一个数组记录每个点的最大长度,当dfs到该点时就返回这个点的最大长度,可以节省非常多的时间。代码如下#include<cstdio>#include<iostream>#include<al...原创 2018-08-13 21:18:25 · 347 阅读 · 0 评论 -
【题解】洛谷P1141 01迷宫(dfs 连通块)
不想写bfs 就用dfs来解决,普通的思路很好想就不说了,反正只能得70分。为了节省时间,我们可以考虑连通块的做法,将从某个点移动到达的所有点的数量记录下来,存在数组里,给这个点的vis打上一个标记。然后对于询问的某个点就输出num[vis[i][j]]就好了#include<cstdio>#include<iostream>#include<algor...原创 2018-08-13 17:27:30 · 500 阅读 · 0 评论 -
【题解】洛谷P1351 联合权值(dfs、LCA)
这道题一开始啥也没想就用最短路写,才40分,然后发现自己对寻找最大值取模了,改了之后60分。。然后又发现n个点,n-1条边,其实这个图就是一棵树,每一个点到其余点的最短路有且只有一条,完全可以用dfs对每个点进行扩展,扩展两层找到点然后进行操作。。虽然看起来更简便了,但还是60分,所以我们得想更好的方法。为啥它让你找距离为2的点而不是距离为3、4……的点呢?我们可以发现,对于一个中心结点,它的...原创 2018-08-07 17:57:15 · 332 阅读 · 0 评论 -
【题解】洛谷P1074 靶形数独(dfs)
这道题最好想到的就是深搜的操作,然而看到数据范围,我们还是要对深搜本身和一些剪枝方法进行优化。首先打表将得分数组记录下来,一开始的思路是dfs每个格子,当指针到82时停下来。手写判断函数,对是否在同一行、是否在同一列、是否在同一个宫进行判断(一开始用的是循环 这里可以优化)。由于读入格子时我们可以算出横纵坐标, hang=(x-1)/9+1; lie=(x-1)%9+1;如果有数...原创 2018-07-29 22:17:17 · 506 阅读 · 0 评论 -
【题解】 NOIP2012 提高组day1 T3 开车旅行(倍增 dfs 模拟) 70分做法
倍增没有学,不过我们可以通过模拟和dfs得到70分的部分分。手写dis函数求两个城市距离=海拔差的绝对值。设一个km[i][2]的二维数组,来记录离i个城市距离最近和第二近的城市,要注意题目里有许多细节。例如距离相同时判断海拔低的城市更近。设m2 m1为0代表离i次近和最近的城市,循环城市i,再循环j(i+1 到 n),如果满足上述条件,就用j更新m1,m1更新m2。当然存在j不是最近但能更新...原创 2018-07-14 21:35:05 · 221 阅读 · 0 评论 -
【题解】洛谷P2149 [SDOI2009]Elaxia的路线(记忆化搜索 最短路)
题目里已经明示了这道题的目的:具体地说,就是要求无向图中,两对点间最短路的最长公共路径。那么我们首先得把两对点的每一个点到其他点的最短路求出来,可以通过spfa来解决。这里我开了一个二维数组dis[s][v],s范围从1-4,分别代表出发点为x1,y1,x2,y2的四种情况,v则是其他点的编号。存下这个信息后,我们就需要找到最短路的公共部分。我们首先让Elaxia从宿舍(x1)出发,然后求在她到达...原创 2018-08-23 22:14:17 · 321 阅读 · 0 评论