草庐IT

gk的树(贪心 dfs) 哈理工程序设计竞赛

题目:​给你一棵树,每次操作你可以删去一条边,最少需要多少次操作使每个节点的度数都\(分析:​我们可以想一想如何贪心,对于本题,最优的结果是让任意一个点连的边最多越好(但不能超过K,所以从树的底部到根,能删就删。这样可以保证,删的边数是最少的。实现:​用dfs跑,注意的是如果没有父节点,tot[u]的初始化为0,其余都是有一个父节点提供一条边。对于一个节点,能删就删。#includeusingnamespacestd;#definerep(i,a,n)for(inti=a;iPII;constintinf=0x3f3f3f3f;voidread(int&x){ints=0,f=1;charch

gk的树(贪心 dfs) 哈理工程序设计竞赛

题目:​给你一棵树,每次操作你可以删去一条边,最少需要多少次操作使每个节点的度数都\(分析:​我们可以想一想如何贪心,对于本题,最优的结果是让任意一个点连的边最多越好(但不能超过K,所以从树的底部到根,能删就删。这样可以保证,删的边数是最少的。实现:​用dfs跑,注意的是如果没有父节点,tot[u]的初始化为0,其余都是有一个父节点提供一条边。对于一个节点,能删就删。#includeusingnamespacestd;#definerep(i,a,n)for(inti=a;iPII;constintinf=0x3f3f3f3f;voidread(int&x){ints=0,f=1;charch

[Leetcode464]我能赢吗?——状态压缩+dfs

1.题目在"100game"这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和 达到或超过 100的玩家,即为胜者。如果我们将游戏规则改为“玩家 不能 重复使用整数”呢?例如,两个玩家可以轮流从公共整数池中抽取从1到15的整数(不放回),直到累计整数和>=100。给定两个整数 maxChoosableInteger (整数池中可选择的最大数)和 desiredTotal(累计和),若先出手的玩家是否能稳赢则返回 true ,否则返回 false 。假设两位玩家游戏时都表现 最佳 。示例1:输入:maxChoosableInteger=10,desiredTo

[Leetcode464]我能赢吗?——状态压缩+dfs

1.题目在"100game"这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和 达到或超过 100的玩家,即为胜者。如果我们将游戏规则改为“玩家 不能 重复使用整数”呢?例如,两个玩家可以轮流从公共整数池中抽取从1到15的整数(不放回),直到累计整数和>=100。给定两个整数 maxChoosableInteger (整数池中可选择的最大数)和 desiredTotal(累计和),若先出手的玩家是否能稳赢则返回 true ,否则返回 false 。假设两位玩家游戏时都表现 最佳 。示例1:输入:maxChoosableInteger=10,desiredTo

有向图的拓扑排序——DFS

在有向图的拓扑排序——BFS这篇文章中,介绍了有向图的拓扑排序的定义以及使用广度优先搜索(BFS)对有向图进行拓扑排序的方法,这里再介绍另一种方法:深度优先搜索(DFS)。算法考虑下面这张图:首先,我们需要维护一个栈,用来存放DFS到的节点。另外规定每个节点有两个状态:已访问(这里用蓝绿色表示)、未访问(这里用黑色表示)。任选一个节点开始DFS,比如这里就从0开始吧。首先将节点0的状态设为已访问,然后节点0的邻居(节点0的出边指向的节点)共有1个:节点2,它是未访问状态,于是顺下去访问节点2。节点2的状态也设为已访问。节点2有3个邻居:3、4、5,都是未访问状态,不妨从3开始。一直这样访问下去

有向图的拓扑排序——DFS

在有向图的拓扑排序——BFS这篇文章中,介绍了有向图的拓扑排序的定义以及使用广度优先搜索(BFS)对有向图进行拓扑排序的方法,这里再介绍另一种方法:深度优先搜索(DFS)。算法考虑下面这张图:首先,我们需要维护一个栈,用来存放DFS到的节点。另外规定每个节点有两个状态:已访问(这里用蓝绿色表示)、未访问(这里用黑色表示)。任选一个节点开始DFS,比如这里就从0开始吧。首先将节点0的状态设为已访问,然后节点0的邻居(节点0的出边指向的节点)共有1个:节点2,它是未访问状态,于是顺下去访问节点2。节点2的状态也设为已访问。节点2有3个邻居:3、4、5,都是未访问状态,不妨从3开始。一直这样访问下去

从 695. 岛屿的最大面积 入手深度优先搜素DFS

一、什么是深度优先遍历(DFS)以“深度”为第一关键词,每次都沿路径到不能再前进时,才退回到最近的岔路口,然后继续按同样的逻辑搜索。 二、题目与解答题目: Leetcode695. 岛屿的最大面积解答思路:首先要遍历数组,当发现(i,j)对应为陆地时,进行如下步骤:   (1)递归解法递归解法最重要的是首先要确定递归边界。(设计递归函数时,我们必须为它设置一个结束递归的“出口”,否则函数会一直调用自身(死循环),直至运行崩溃。)该题有两个递归边界:一个是矩阵尺寸限制, 一个是碰到了水域 一般来说,深度优先搜索类型的题可以分为主函数和辅函数,主函数用于遍历所有的搜索位置,判断是否可以开始搜索,如

从 695. 岛屿的最大面积 入手深度优先搜素DFS

一、什么是深度优先遍历(DFS)以“深度”为第一关键词,每次都沿路径到不能再前进时,才退回到最近的岔路口,然后继续按同样的逻辑搜索。 二、题目与解答题目: Leetcode695. 岛屿的最大面积解答思路:首先要遍历数组,当发现(i,j)对应为陆地时,进行如下步骤:   (1)递归解法递归解法最重要的是首先要确定递归边界。(设计递归函数时,我们必须为它设置一个结束递归的“出口”,否则函数会一直调用自身(死循环),直至运行崩溃。)该题有两个递归边界:一个是矩阵尺寸限制, 一个是碰到了水域 一般来说,深度优先搜索类型的题可以分为主函数和辅函数,主函数用于遍历所有的搜索位置,判断是否可以开始搜索,如

dfs学习笔记

题目链接可以通过参考一道例题来加深对dfs的认知和学习题意描述按照字典序输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。输出格式由1∼n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个场宽。数据范围:1题目分析输入:1输出:123132213231312321观察输出样例可知,5个场宽输出的意思是每个数输出时占5个位置且右对齐,就是以"%5d"格式输出接着分析题目,求全排列,其实可以深搜,也就是dfs。解题思路算法分析我们以n=3为例,可以构造一颗搜索树来进行搜索。如图所示:对一个位置进行查找,把之前没有用过的数填上去,接着对下一个位置

dfs学习笔记

题目链接可以通过参考一道例题来加深对dfs的认知和学习题意描述按照字典序输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。输出格式由1∼n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个场宽。数据范围:1题目分析输入:1输出:123132213231312321观察输出样例可知,5个场宽输出的意思是每个数输出时占5个位置且右对齐,就是以"%5d"格式输出接着分析题目,求全排列,其实可以深搜,也就是dfs。解题思路算法分析我们以n=3为例,可以构造一颗搜索树来进行搜索。如图所示:对一个位置进行查找,把之前没有用过的数填上去,接着对下一个位置