DFS
keyboarder_zsq
你所认为的极限,其实是别人的起点。
展开
-
CodeForces770C【强连通分量+DFS序】
思路: 显然按照他的意思建图肯定不行。 对于u所需要先解决的v[], 建边 u -> v[], 然后就是判断一下每个main 课程是否在一个环里,或者是不是他需要先修的课程在环里,这样子就不满足。 然后我就很爆炸,窝很蠢地想到了Tarjan,然后就处理了一下那些强连通分量,然后就是用来判断是不是在环里,不满足。 然后就是对每个main 课程 DFS搜,然后就好啦,然后智障的窝第一次发现这个拓原创 2017-11-23 18:36:11 · 665 阅读 · 0 评论 -
POJ1011【判重剪枝】
题意:给你一堆棒子,这些棒子是你从一堆一样的棒子折断而来的,现在你忘记了是从那一堆一样的棒子的长度,让你写一个程序,求最短的长度。思路:首先这个棒长肯定是和的约数,且大于最大值。然后是sort一下棒子长度从大到小(我也不知道为啥可行)最后就是一个判重剪枝:注意判重剪枝,是对相同情况的剪枝,这个相同情况就是要非常相同!这里代码那个!vis[i]很有体会啊;//#i原创 2017-02-14 21:25:28 · 418 阅读 · 0 评论 -
ZOJ3158 【DFS】
题意:从上往下切割,不能切边缘,然后问你两个差值,要小于给出的值。思路:直接爆搜,枚举每一行的劈开位置;#includeusing namespace std;const int N=1e2+10;const int INF=0x3f3f3f3f;int n,m;int sum[N][N];int ssum,ans;void DFS(int num,int su原创 2017-01-17 16:49:25 · 124 阅读 · 0 评论 -
玲珑学院1072 【DFS】
蛤蛤,略蠢。priority_queue 自定义优先级 和排序是反的struct node{ int x,y; friend bool operator< (node a,node b) { if(a.y<b.y) return 1; if(a.y==b.y&&a.x>b.x) r原创 2016-12-24 15:36:00 · 411 阅读 · 0 评论 -
Codeforces 744C【DFS】
NO RESPONSE原创 2016-12-18 13:54:11 · 912 阅读 · 0 评论 -
codeforces743D 【DFS】
题意:给你一棵以1为root的根,然后让你求两棵不相交子树的最大和;思路:DFS,主要就是你一定得使两棵子树不相交;对于一个顶点u,维护以u为根的最大子树和。①:包含u,即所有的结点和。②:不包含,在子树内找一个最大子树。每次对于一个根搞搞就好了,维护一下答案;这个DFS真的赞。。一开始wa4还是那个没有保证子树不相交,后来RE5 and WA5 DFS的函数int原创 2016-12-15 17:52:05 · 611 阅读 · 0 评论 -
Lightoj 1094 【DFS】
题意:给你一颗n-1条边的树,求某两点的最长路思路:随便找个根,然后我们从根往下搜,对于每个结点会出现多个子节点或者一个子节点或者没有结点,多个子节点的话,就以他为中间点,在子节点中找两条最长的,加起来比比;直接搜吧;哎好难讲啊,其实画个图就很容易了;(直接注释在代码里面吧。。#include using namespace std;typedef lo原创 2016-11-17 16:29:13 · 431 阅读 · 0 评论 -
51nod 1416【DFS】
思路:暴力整个图,以这个为起点,然后看一下有没有找到一条路是会指向自己且元素个数>=4;#include using namespace std;typedef long long LL;const int mod=1e9+7;const int N=55;char ma[N][N];bool vis[N][N];int n,m;int s,t;int flag;i原创 2016-10-30 22:33:44 · 391 阅读 · 0 评论 -
CodeForces 723F【DFS瞎搞】
题意:给你一幅图,你要用这些边构造一个树,s和t两个节点的度数不能超过ds dt而且图是保证没有环思路:首先把S,T点从图里剥离出来,可以把与S,T无关的边搞成一个几个连通块然后剩下的就是与S,T的一些连通块,还是要处理出来;对于这些连通块有三种:只与S连的,那我用S连他们的爸爸,同理只与T连的,还有一种是两个都连的,其实就是能连哪个连哪个;然后S和原创 2016-10-05 00:42:23 · 117 阅读 · 0 评论 -
HDU4801【DFS】
题意: 给你一个2阶魔方,给你24个数代表颜色,然后让你求在思路:就是一个DFS嘛,就是怎么转搞出来;上面: 22 234 0 1 95 2 3 8 6 7前侧: 2 35 6 7 811 12 13 14 16 17左侧: 0 222 4原创 2016-10-27 21:17:23 · 514 阅读 · 0 评论 -
Codeforces Round #375 (Div. 2)【A,B【模拟】,D【DFS】】
PS:D题主要挂在了50*50口算得了250,数组开小,然后一开始还错了。= =哎,以后对于数据范围还是注意一点;A题:水~#include#include#include#includeusing namespace std;const int N=1010;int sum;int ans=N;int a,b,c;int n,m;void solve(){原创 2016-10-04 00:51:13 · 458 阅读 · 0 评论 -
Lightoj1012【DFS】
题意:输出和' @ '相连有多少个' . '包括' @ ',' # '代表墙不能走;思路:基础DFS,找到起点,然后跑一下DFS就好了;#include#include#include#include#include#include#includeusing namespace std;typedef long long LL;const int INF=0x3f原创 2016-10-17 22:21:52 · 303 阅读 · 0 评论 -
Codeforces764C【DFS】
题意:找一个根使得不带根的所有子树内部颜色都相同;思路:如果存在两个颜色不一样的连在一起,根就是他们两个中间一个。。。。。。直接搜两次就好了。。。#includeusing namespace::std;typedef pair PII;const int N = 4e5+10;struct Edge{ int to; int next;};原创 2017-02-03 15:36:39 · 122 阅读 · 0 评论 -
CodeForces 104C【树特性】
题意:判断这副图是否满足根是一个环的缩点,然后其余点都是一个点,满足树特性。思路:一开始就像无向图缩点乱搞,然后实在太烦搞不下去。。。。一副图是满足结点和边数量相等,且连通,则一定有一个环。so...实际代码只有判连通= =#include using namespace std;typedef long long LL;const int N=1e2+10;int原创 2017-03-17 23:02:58 · 395 阅读 · 0 评论 -
HDU4358【离散化+DFS序+莫队算法】
思路: 这个DFS序还是蛮有意思的~然后就可以把以u为根的树的状态直接转化到区间(一维数组)上,而且数组是不大的。 然后就变成了区间处理,套一下莫队就好了。 Code:#include<bits/stdc++.h>using namespace std;typedef long long LL;#define mem(a, b) memset(a, b, sizeof(a))const原创 2017-08-20 14:12:59 · 524 阅读 · 0 评论 -
CodeForces 624C【二分图染色】
题意: 本来有一个由’a’,’b’,’c’ 组成的字符串,然后,在这个串里,相同字符 或者 相邻字符能构成边,然后就构成了一副图。 现在抹掉了这个字符串,给你这副图,问你能不能组成这个字符串。 思路: 其实重要的就是:如果存在两个点没有边,这两个点只能是 a,c; 那么问题变成,给我这副图的补图是不是能由 a, c 组成,边的相邻两点只能是 a-c; 那么就用染色可以简单地解决这个问题。原创 2017-07-18 20:33:49 · 633 阅读 · 0 评论 -
2016CCPC东北地区大学生程序设计竞赛【01/03/05/06/08】
So Sad...原创 2016-10-06 12:02:42 · 1660 阅读 · 0 评论 -
POJ3107&&POJ1655【树形DP/简单搜索】
写完1655无聊翻了翻discuss,然后顺便改改过了3107…定义一个节点的节点的平衡值为删除这个节点后产生分支连通块元素最大的数量。POJ3107题意:给一颗n个结点的树,节点编号为1~n, 可能有多种方案,按编号顺序输出。POJ1655题意:如果多种方案只取最小节点编号并输出这个值。思路:dp[node] 代表以 node 为根的子树的节点数量。 答案:node_ans:node\_ans原创 2017-05-22 20:26:03 · 520 阅读 · 0 评论 -
上海市高校程序设计邀请赛暨华东师范大学第九届 ECNU Coder 程序设计竞赛 C. 神奇怪兽在哪里
题意:略.思路:先把 ∗* 连通块附近的 .. 位置存起来A={}A=\{\},然后拿P去一个一个连续的到达,到达用BFS写,存个路径,有一个小优化就是在某一次BFS过程中如果已经到达过一些位置,那么就没必要再BFS到这个位置了。 PS: 然后没想到的是跑的还飞快…猜测数据稍微有点弱…#include <bits/stdc++.h>using namespace std;typedef pai原创 2017-05-21 17:22:43 · 904 阅读 · 0 评论 -
POJ1426【瞎搞DFS】
一开始乱搞...打表,后面发现好几个数(99,198,189) 都输不出来就continue掉了,后来发现应该可以在long long以内,就开心地爆搜了一发,发现有些数爆了,改了ull一发,有些数 (99) 出来了,就198搜不出来,然后强行n=198的时候,输出的时候continue掉,后来就过了...233333后面搜了一发题解发现,位数可以19位(其实是20位),对哦!unsi原创 2017-04-25 21:38:55 · 360 阅读 · 0 评论 -
HUST1350【DFS/BFS瞎搞】
题意:给出一棵 TireTire 树,一个结点 indexindex 的价值: value[V]=∑V∈Leave Nodedis{index,V}value[V] = \sum_{V \in Leave\ Node } dis\{index, V \} 这棵 TrieTrie 树的价值是 min{V,V∈Trie Node}\min\{ V,V\in Trie\ Node\}; 求这棵 T原创 2017-05-01 20:59:58 · 342 阅读 · 0 评论 -
51nod 1405【DFS】
思路:对于结点 u 的子节点 v, 如果已经一直到结点 u 的答案ans[u],那么转移到对于结点 v,num[v] 为 v为根的树的结点个数,那么对于结点v的答案相对于结点u的答案来说,ans[v]=-num[v]*edge[u,v]+(n-num[v])*edge[u,v];//#include#include#include#includeusing name原创 2017-03-26 22:39:40 · 420 阅读 · 0 评论 -
51nod 1737【树的重心】
思路:树的重心也叫树的质心。找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。考虑每一条边被统计进答案几次,若断开这条边后树形成大小为s1、s2的两个联通块则这条边最多被统计min(s1,s2)次。删去重心后任意同一联通块中的两点不构成路径。#include using namespace std;typed原创 2017-04-03 14:37:35 · 462 阅读 · 0 评论 -
ZOJ 2849【瞎暴力的搜索】
思路:靠评测机抖一抖的思路:拿个队列维护一下符合类型的可以搜索(指四周还存在可以遍历的点)的点。然后暴力搜索,所以问题来了,这个暴力搜索会大大地重复遍历次数。这个思路的代码见第一份。那么问题就很明显了,为了减少遍历次数,所以我们BFS,每次仅遍历附近四个,然后拿优先队列维护天数小的,类型小的,这样复杂度仅仅是多了个log,减少了很多重复遍历次数。第一份代码:#include原创 2017-03-27 23:06:32 · 181 阅读 · 0 评论 -
lightoj1009【DFS】
思路:连通快+二分图,每次+二分图大的元素个数。#includeusing namespace std;typedef unsigned long long ULL;typedef long long LL;const int N=2e4+10;bool ex[N],vis[N];vectore[N];int n,au,av; void DFS(int u,int fla原创 2017-03-08 21:41:24 · 149 阅读 · 0 评论 -
Lightoj1002 【搜索】
题意:两两之间的点的花费就是:从A点到B的一条路上某段的最大权值;给一个起点,求到各起点的最小花费。思路:一开始的思路:n不是才500,我先建个图,然后DFS一下,不对,是2500;如果直接暴搜,肯定T了。因为可能有一个环,然后你不能处理一个节点的向上节点。= =、T在这里,所以每次暴搜就相当于每次暴搜了整幅图;一开始写了一发,还以为再一次深刻理解DFS,然后T的我一脸懵逼原创 2016-10-16 19:46:24 · 653 阅读 · 0 评论 -
hdoj3665【简单DFS】
题意: 略。 思路: n就10而已,没有环,搜一下就好了。。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int mod=1e9+7;const int N=10+10;const int INF=0x3f3f3f3f;int ma[N][N];bool flag[N];bool vis[原创 2016-09-08 19:09:45 · 393 阅读 · 0 评论 -
hdoj1728【搜索的两种写法】
以前的一道题目,现在拿到总觉得是DFS,然后T掉就没什么想法了,很狗的看了以前的写法(以前还是看题解的AC的),是BFS,每次都要转弯,但是之前你的达到一种他走到了死路,所以才是不得不转弯,写法也是非常棒,预处理的转弯数是-1就可以达到一开始转弯的+1抵消。但是总觉得还是有dfs,毕竟k这么小。先贴一发BFS的,睡觉了~#include<iostream>#include<cstdio>#inc原创 2016-07-09 00:59:12 · 935 阅读 · 0 评论 -
HDU1016【简单递归.DFS】
题意:一个环,相邻相加是素数。 思路: 直接深搜就好了。。 output limit exceed 了好几发。。。 因为那个while里面的scanf前面的“~” 后来搜了output limit exceed的常见错误,还有输入输出,所以主要看下输入输出那边有没有写错吧,还有写的时候也要及其避免出现错误。#include <bits/stdc++.h>using namespa原创 2016-07-11 22:31:03 · 466 阅读 · 0 评论 -
POJ2718【DFS】
题意: 给你0到9之间的数,然后让你搞成两个数,求一个最小差异值(被组合的数不允许出现前导0) 思路:最小差异那么肯定是有一个整数长n/2,另一个长n-n/2,搜一下就好了。code:#include<cstdio>#include<string.h>#include<iostream>#include<algorithm>using namespace std;next_permuta原创 2016-06-03 13:53:39 · 453 阅读 · 0 评论 -
hdoj2952【DFS联通块】
我觉得还是这种不带回溯的直接搜到底的好玩啊!!!但是要注意边界,记得以前四周要空出来的一道题目,被坑了很久,还是wa到比赛结束!!!这道还是基础题#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>#include <iostream>using namespace std;#define L原创 2016-05-31 12:45:17 · 1054 阅读 · 0 评论 -
DFS系列 POJ(自认为的讲解)
C - Sum It Up POJ1564 题意: 给你一个N,然后给你一堆数The numbers in each list appear in nonincreasing order, and there may be repetitions.,让你在这对数里找出一些数,如果他们的和sum==N,则按样例的格式数输出。 思路: 那就是DFS呗,深搜一波,当sum==N时就输出,这里有原创 2016-05-08 20:20:08 · 838 阅读 · 0 评论 -
POJ2488【DFS】
阿西吧,搞清楚谁是行,谁是列啊!!!#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>#include <iostream>using namespace std;#define LL __int64#define N 50int d[8][2]={{-2,-1},{-2,1},{-1,原创 2016-05-30 19:51:59 · 398 阅读 · 0 评论 -
poj1564
dfs判重#include<stdio.h>#include<iostream>#include<cstdio>#include<queue>#include<queue>#include<stack>#include<cmath>#include<cstring>#include<cstdlib>#include<climits>#include<algorithm>usin原创 2016-04-21 16:48:48 · 640 阅读 · 0 评论 -
拓扑排序+DFS(POJ1270)
【日后练手】(非解题) 拓扑排序+DFS(POJ1270)#include<stdio.h>#include<iostream>#include<cstdio>#include<queue>#include <vector>#include<map>#include<stack>#include<cmath>#include<cstring>#include<cstdlib>#原创 2016-04-21 16:38:34 · 526 阅读 · 0 评论 -
基础BFS+DFS poj3083
//满基础的一道题 //最短路径肯定是BFS。 //然后靠右,靠左,就DFS啦 //根据前一个状态推出下一个状态,举靠左的例子,如果一开始是上的话,那么他的接下来依次就是 左,上 , 右 , 下 //如果我们用数组存一下 左,上 , 右 , 下, //而且你会发现他原来的状态是d,下一个状态就是=((d-1+4)%4+i)%4,其实你比划一下,就会知道左的话就是下开始变,上的话就是左开原创 2016-05-29 13:08:48 · 524 阅读 · 0 评论 -
poj1312dfs基础
就是很简单的DFS…因为数据偏小,上去就是干了#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>#include <iostream>using namespace std;#define LL __int64#define mod 9973#define N 100010char ss原创 2016-05-27 20:58:13 · 513 阅读 · 0 评论 -
ZOJ1004 DFS基础
这道题一看就觉得是DFS,但是,不对,还有栈,这就有点难办了。 DFS+栈一波新姿势。 在DFS里面用栈的思想。 DFS主要就是搜下去, 然后前一个状态标记,搜完以后,还是要保持前一个状态。 然后就把栈往上面一套就好了。 进栈出栈用数组分别标记一下就好了。 一个是出栈,也就是要被进栈的字符串的长度sum#include<iostream>#include<cstdio>#inclu原创 2016-05-10 23:03:25 · 918 阅读 · 0 评论 -
<TLE>奇偶剪枝hdoj1010
(奇偶剪枝)转自百度百科,讲的非常棒: http://baike.baidu.com/link?url=3g5bW7LszRVOVvFDFp6cL0ZZnAaOLUdpaNjc2leHoxkKU9EhGzEYWszpYwzBq_e_EdRhT-hKSy2i84LaUrBdUq 结论: 若 t-[abs(ex-sx)+abs(ey-sy)] 结果为非偶数(奇数),则无法在t步恰好到达; 返回,原创 2016-04-21 16:27:59 · 542 阅读 · 0 评论 -
Codeforces 378C
DFS连通块,思路就是搜到底,然后一个一个回溯(填上X)上来#include <iostream>#include <stdio.h>#include <string.h>#include <stack>#include <queue>#include <map>#include <set>#include <vector>#include <math.h>#include <al原创 2016-07-04 09:17:44 · 606 阅读 · 0 评论