dfs
深度优先搜索
为什么他们cf写的这么快
这个作者很懒,什么都没留下…
展开
-
【牛客】装货物(dfs)
题目链接思路:n的范围小,大胆暴力,其中now指的是当前的第now件货物。#include<bits/stdc++.h>using namespace std;const int maxn=25;int n,T,x,w,a[maxn],b[maxn];bool dfs(int now){ if(now==n+1) return true; for(int i=1;i<=min(x,now);++i) { if(b[i]+a[now]>w) continue原创 2021-05-09 20:42:31 · 256 阅读 · 0 评论 -
Codeforces Round #635 (Div. 2) C. Linova and Kingdom(dfs+贪心)
题目链接思路:很显然贪心的选择最深层的,如果不够的话再逐渐由底向上选择,但这里有一个问题,如果选了上一层的节点的话对于下一层节点来说,他们能走的路就又少了一段,这个时候要怎么处理好呢?(在这里卡了Bug了好久。。。),其实只要考虑每一个节点的贡献就行了,假设我要选这个节点的话意味着这个节点的子树我都必须选,那个它的贡献就是它的深度-它的子树的大小,sort一下选最大的k个就可以了。#inc...原创 2020-04-19 09:46:02 · 124 阅读 · 0 评论 -
牛客练习赛61 C 四个选项(dfs+并查集)
题目链接链接:https://ac.nowcoder.com/acm/contest/5026/C来源:牛客网题目描述众所周知,高考数学中有一个题目是给出12个单项选择,每一个选择的答案是 A,B,C,D 中的一个。 网上盛传答案存在某种规律,使得蒙对的可能性大大增加。于是今年老师想让你安排这12个题的答案。但是他有一些条件,首先四个选项的数量必须分别为 na,nb,nc,nd。其次有 ...原创 2020-04-11 19:49:49 · 239 阅读 · 0 评论 -
Codeforces Round #161 (Div. 2) D. Cycle in Graph(dfs判环+路径输出)
题目链接题意:给定n点m边的无向图,要求你找长度大于等于k+1的环,并输出路径。思路:一开始想用tarjan缩点来做,但是对于一些环套环的情况处理起来好像比较麻烦,也容易出错,还是老老实实dfs吧。#include<bits/stdc++.h>using namespace std;typedef long long ll; const int maxn=2e5+1; ...原创 2020-03-16 21:41:51 · 184 阅读 · 0 评论 -
VK Cup 2015 - Qualification Round 1 A. Reposts(STL+dfs)
题目链接思路:建边,用dfs求最大深度。#include<bits/stdc++.h>using namespace std;typedef long long ll; const int maxn=1e3+1; int n,cnt=0,deep=0,root;vector<int>g[maxn];map<string,int>p;stri...原创 2020-03-16 21:45:27 · 185 阅读 · 0 评论 -
Codeforces Beta Round #88 C. Cycle(dfs+找环)
题目链接不知道为什么这个题用ans记录会mle,下面是mle代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=5e3+5;int n,m,num[maxn],pre[maxn],flag=0;vector<int>g[maxn],ans;char...原创 2020-03-18 21:40:47 · 169 阅读 · 0 评论 -
Codeforces Beta Round #14 (Div. 2) D. Two Paths(树的直径)
题目链接题意:给定一棵树,要你在树上找两条路径,使得这两条路径长度的乘积最大(两条路径长度不能有公共点),输出最大值。思路:考虑一下每条边的贡献,如果割去一条边,那么就会形成两棵树,取这两棵树的直径再取max就行了。这里求直径的时候记得id要初始化。#include<bits/stdc++.h>using namespace std;typedef long long l...原创 2020-03-18 21:44:17 · 292 阅读 · 0 评论 -
Codeforces Round #216 (Div. 2) C. Valera and Elections (dfs)
题目链接题意:给定一棵树,树的每条边的边权不是1就是2,现在规定如果选了树上的一个点,那么就可以把这个点和这个点的所有祖先节点的边权为2的边都变为1,求选最少的点使得整个树的边都为1。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5+5;vector<...原创 2020-03-18 22:13:33 · 122 阅读 · 0 评论 -
CodeCraft-20 (Div. 2) D. Nash Matrix(dfs+模拟)
题目链接题意:要你构造出一个矩阵,由字幕UDLRX组成,分别表示到这个点时向上、下、左、右走,X代表不能走,题目给出n*n个坐标,意思是从起点(i,j)出发到终点(a[i][j][0],a[i[[j][1])停止,要你构造满足所有点的字符矩阵。思路:我们肯定是可以知道哪些点是X(起点和终点一样就是),那么假设(i,j)点是X,其他所有点到(i,j)的路径其实是可以逆推的,用dfs模拟就行,...原创 2020-03-05 11:28:04 · 225 阅读 · 0 评论 -
Educational Codeforces Round 37 (Rated for Div. 2) E. Connected Components?(图论+连通块+bfs)
题目链接题意:给定一个完全图,让你删去m条边后,剩下的连通块个数和每个连通块的大小思路:可以bfs将属于同一个连通块集的元素放在一起,知道v为空,v是所有的顶点集。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+1;map<int,int>p...原创 2020-03-10 21:39:19 · 106 阅读 · 0 评论 -
VK Cup 2017 - Qualification 2 C. Online Courses In BSU(dfs)
题目链接题意:总共有n个任务,有m个任务你必须完成,每个任务完成前可以有其他的子任务也必须完成,求完成的任务的顺序。思路:一开始想着拓扑排序,但好像也不用那么反面,直接将那m个任务进行dfs,如果先后顺序反了则是-1.#include<bits/stdc++.h>using namespace std;typedef long long ll;const int max...原创 2020-03-10 21:44:14 · 6607 阅读 · 0 评论 -
Codeforces Round #364 (Div. 1) B. Connecting Universities(图论+贪心+算贡献)
题目链接题意:给定一棵树,树上有2k个点,现在要给这2k个点两两配对,求这k对点配对后他们的距离之和最大为多少。思路:又是一个按边算贡献的题,然而自己却总是考虑不到这方面去。。。我们思考对于一条边u->v他能产生多少贡献?我们要距离和最大的话肯定贪心的向一个点尽可能地往外配对,于是一条边地贡献为min(num【v】,n-num【v】)。#include<bits/stdc+...原创 2020-03-11 21:09:10 · 209 阅读 · 0 评论 -
Codeforces Round #369 (Div. 2) D. Directed Roads (图论+组合数学+dfs)
题目链接思路:一开始想的太复杂,其实它只有n条边的话,它的图其实不会很复杂,最多是多个环加一条链,不会有环套环地情况,对于一个环地所有边来说除了不变和全部一起变两种情况外,其他地变化都可以,所有环地贡献为pow(2,n)-2,n为环的边数,对于非环边,它要么变要么不变,就有pow(2,n)的贡献。#include<bits/stdc++.h>using namespace s...原创 2020-03-11 21:14:08 · 121 阅读 · 0 评论 -
Codeforces Round #499 (Div. 1) D. Mars rover(位运算+dfs)
题目链接题意:给定一个二叉树和四个字符,IN是指在叶子节点输入,AND是两个儿子节点按位&,OR是两个儿子节点按位|,XOR是两个儿子节点按位^,NOT是儿子节点异或1,根据叶子节点输入的值,一步步由底向上递推出答案,现在要求每个叶子节点改变值,求该叶子节点值改变后的根节点的值。思路:一个个枚举不太现实,我么可以做到的就是判断出哪个叶子节点改变后对会根节点产生变化标记为vis【x】...原创 2020-03-02 21:53:26 · 223 阅读 · 0 评论 -
Codeforces Round #398 (Div. 2) C. Garland(树上操作+dfs)
题目链接思路:我们先深搜,有底向上回溯的过程中记录子树和等于sum/3的点就可以了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6+1;vector<int>g[maxn];int n,num[maxn],root,x=-1,y=-1;l...原创 2020-03-03 20:23:12 · 110 阅读 · 0 评论 -
Codeforces Round #565 (Div. 3) E. Cover it! (dfs染色法)
题目链接题意:给定一个有向图,要你选择一个不超过n/2个点的集合,使得他们能连上图的所有点。思路:用dfs染色法,相邻的点涂上不同颜色,判断一下颜色数小于n/2的点输出来就行了。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+1;int color[ma...原创 2020-03-04 19:19:54 · 112 阅读 · 0 评论 -
Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges(dfs判环+图论)
题目链接思路:我们如果该图无环,全输1,否则,由于有向图有环有一个性质,一定存在一个编号小的点指向编号大的点,那么我们为了方便,干脆直接把编号小的指编号大的给染1,否则染2。判断有多种方式,可以并查集,也可以拓扑排序。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn...原创 2020-02-18 20:33:37 · 132 阅读 · 0 评论 -
Codeforces Round #599 (Div. 1) B. 0-1 MST(图论+dfs)
题目链接思路:答案很容易想到就是非直连边的连通块的数量-1,这题难就难在你想到了,但你不会实现。。。vis一开始存的是所有点,temp存的就是与当前点x的非直连点,每次dfs到一个点的时候就将与他非直连点从vis里删除。#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+1;set<int...原创 2020-02-19 21:03:42 · 179 阅读 · 0 评论 -
Codeforces Round #583 (Div. 1 + Div. 2,) D. Treasure Island(dfs+思维)
题目链接题意:要你从(1,1)走到(n,m),你只能往下和往右走,问最少要设置多少障碍才能使你走不动(n,m)思路:答案最多为2,以为只要堵住(1,1)的下边和右边你就走不了了,那么能不能更少呢?其实有的,就是从起点到终点的众多路径中如果存在着必经点的话,那么答案就是1,现在关键是怎么判断是否存在必经点,可以用dfs标记一下路径,如果存在着两个完全不相同的路径那么答案就是2,否则就是1....原创 2020-02-24 21:51:21 · 162 阅读 · 0 评论 -
2020牛客寒假算法基础集训营1 F maki和tree(图论+dfs)
题目链接思路:以每个黑点作为根,统计一下白色点的连通块大小,计数即可。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 2e5 + 10;char s[N] ;ll ans , n, a[N];queue<int> q ;int tot , head[...原创 2020-02-05 20:21:50 · 145 阅读 · 0 评论 -
Codeforces Round #615 (Div. 3) F. Three Paths on a Tree(树的直径+dfs)
添加链接描述思路:有个结论,a,b,c三个点肯定有两个点是树的直径上的两点,我们只要再标记一下树的直径的路径上的点,然后遍历标记点到未标记点的最大距离Max加上直径就是答案。#include<bits/stdc++.h>using namespace std;const int maxn=2e5+1;vector<int>g[maxn];int n,k,max...原创 2020-02-09 11:38:48 · 125 阅读 · 0 评论 -
Codeforces Round #606 (Div. 1, based on Technocup 2020 Elimination Round 4) B. Two Fairs(图论+dfs)
题目链接题意:给定n个点,m条路构成的无向图,给出点a和b,问有多少对点的路径必须经过a和b思路:先dfs一下,看看不经过点a就能到达的点标记一下,这样未标记的点他们就是一定要经过点a的点的数量,记为cnt1,同理,必须经典点b的点的数量记为cnt2,答案就是cnt1*cnt2#include<bits/stdc++.h>using namespace std;const...原创 2020-02-12 21:27:04 · 161 阅读 · 0 评论 -
Codeforces Round #601 (Div. 2) C. League of Leesins (dfs+构造)
题目链接思路:与首尾相连的只有一个,与第二和倒数第二相连的有两个,其余的都有三个,dfs从起点开始构造即可。#include<bits/stdc++.h>using namespace std;const int maxn=1e5+10;typedef long long ll;vector<int>temp[maxn],v[maxn],ans;int n...原创 2020-02-13 21:44:07 · 131 阅读 · 0 评论 -
codeforces Educational Codeforces Round 78 (Rated for Div. 2) E - Tests for problem D(dfs+构造)
题意:问题D的反问题。。。#include<bits/stdc++.h> using namespace std;const int maxn=5e5+5;int n,u,v,Right=1,ans[maxn][2];vector<int>g[maxn];void dfs(int x,int fa,int left){ int num=(x==1)?g[...原创 2020-01-14 20:45:46 · 194 阅读 · 0 评论 -
Codeforces Round #607 (Div. 2) E - Jeremy Bearimy(贪心+dfs)
思路:给定2k的点,以及2k-1条边构成的树,然后要k对点相连,问你相连后最小权距离和最大权距离。思路:主要参考了大佬的代码点击链接#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=2e5+5;int n,T,head[maxn],cnt,num[maxn];...转载 2020-01-25 16:12:49 · 262 阅读 · 0 评论 -
Codeforces Round #612 (Div. 1) B Numbers on Tree(dfs+思维)
题意:定义Ci为i点子树中权值比i小的结点个数,给定每个节点的Ci值,要你构造出符合条件的权值序列。思路:求权值序列可将所有节点的排名序列先构造出来,再根据排名赋值就行。假设i点子树的排名序列已经构造好了,那么把根据i点的Ci值插入到已构造好的序列的相应位置中就是答案,而上述过程可以用dfs实现。假设当前节点为4,4的Ci值为2,他的子树排名序列为2,5,3,那么Ci的意义4就应该插入再5的...原创 2020-01-08 11:32:22 · 239 阅读 · 0 评论