
DFS
文章平均质量分 56
PoPoQQQ
这个作者很懒,什么都没留下…
展开
-
BZOJ 1064 NOI2008 假面舞会 DFS
题目大意:给定n个人,分别戴着k类面具(k>=3,k未知),其中戴着i类面具的人能看见第i%k+1类人的面具,给定一些人互相看到的关系,求k的最大最小值题解见 http://www.cnblogs.com/proverbs/archive/2013/01/17/2865093.htmlDFS求环长度注意当图中不存在环时k的最大值为所有连通图中最长链的长度之和正边权值为+1 负边权值原创 2014-09-12 16:44:32 · 2038 阅读 · 0 评论 -
BZOJ 1130 POI2008 POD Subdivision of Kingdom DFS
题目大意:给定一个n个点的无向图,要求将点集分成大小相等的两个子集,使两个子集之间的边数最少n但是常规的枚举方法每次需要O(n)统计答案,显然会T这里我们考虑搜索初始令S集为空,T集包含全部的点,然后依次枚举T的某个点加入S集这个点加入S集时,与S集的连边需要从答案中扣除,与T集的连边需要加入答案因此我们将一个点连出的所有边用一个二进制数表示 那么取交集就是连边的数量预原创 2015-03-25 10:17:11 · 1523 阅读 · 0 评论 -
BZOJ 3632 外太空旅行 DFS
题目大意:给定一张无向图,求最大团从小到大依次枚举每个点加或者不加 如果加必须满足加入后是一个团这样状态数很大显然会T 因此可以考虑加入剪枝统计还未加入的所有点中有多少点可以加入当前的团如果这样的点的数量加上当前团中点的数量仍然比ans小 就剪枝这样就可以过了- -其实根据这个估价函数还可以写个A*。。。 我懒得写了。。。#include #include #inc原创 2015-03-25 16:21:58 · 1394 阅读 · 0 评论 -
BZOJ 1098 POI2007 办公楼 DFS+并查集
题目大意:给定一张无向图,一个点集能分成两部分当且仅当这两部分的每一对点之间都有边,求最多能分成多少部分以及每部分的大小这实际上就是在求反图的联通块个数以及每个联通块大小但是反图太大,不能直接做因此我们枚举每个点,从这个点开始DFS这样做是O(n^2)的,但是我们可以利用并查集来减少枚举的复杂度一个点x如果访问过,就在并查集中连向x+1 这样做的好处是枚举的时候可以直接找到下一原创 2015-03-03 22:21:36 · 1432 阅读 · 0 评论 -
BZOJ 3522 Poi2014 Hotel DFS
题目大意:给定一棵树,求有多少无序三元组(x,y,z)满足x,y,z互不相等且Dis(x,y)=Dis(y,z)=Dis(x,z)三个点在树上有两种情况第一种是三点共链 第二种是存在且仅存在一个中心点满足三个点分别在这个点的三个不同的出边的方向第一种情况显然无解第二种情况一定满足三个点到中心点的距离相等由于n时间复杂度O(n^2)#include #include原创 2015-03-04 23:27:11 · 2045 阅读 · 0 评论 -
BZOJ 1149 CTSC2007 风玲Mobiles DFS
题目大意:给定一棵完全二叉树,可以交换某个节点的左右儿子,求最少交换多少次可以使所有的叶节点深度相差不超过1,且深度较大的叶节点都在深度较小的叶节点左侧这水题居然还WA了两次- - 脑残害死人啊QAQ首先DFS一次处理出深度最大和最小的叶节点 如果深度相差>=2则无解然后再DFS一遍,对于每个节点首先向子节点递归,然后记录左右两棵子树中深度较大叶节点的存在性和深度较小叶节点的存在性原创 2015-03-08 18:23:16 · 2084 阅读 · 0 评论 -
BZOJ 3990 Sdoi2015 排序 DFS
题目大意:给定一个长度为2^n的排列,有n个操作,第i个操作为【将序列分成2^(n-i+1)段,每段长2^(i-1),然后任选两段交换】,每个操作最多用一次,求有多少操作序列能把序列排出来Orz dzy首先我们很容易发现一个操作序列是否合法与序列的顺序是无关的因此我们只需要确定某个操作序列中每个操作选不选就行了 那么这类操作序列对答案的贡献就是选择的操作数的阶乘我们从小到大DFS,原创 2015-04-16 13:38:10 · 2120 阅读 · 0 评论 -
BZOJ 1603 Usaco2008 Oct 打谷机 DFS
题目大意:给定一棵树,每个点是一个齿轮,1号齿轮顺时针旋转,每条边有同向和反向两种连接方式,求n号齿轮的旋转方向 DFS一遍即可#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 1010using namespace std;struct abcd{ int t原创 2015-05-03 15:28:15 · 1206 阅读 · 0 评论 -
codeforces#36E Two Paths DFS
题目大意:给定一张n=10000,m<=10000n=10000,m<=10000的图,要求将这张图分割成两条不相交、不重复的路径,输出任意一组方案或无解蛮水的一道题- - 首先m=1m=1一定无解 然后判断有效点的连通块数,若≥3\geq 3则无解 若连通块数量为22,则这两条路一定是每个连通块中的一条欧拉通路 若连通块的数量为11,讨论: 若度数为奇数的点>4>4,无解 若度数为奇数原创 2015-05-13 15:44:40 · 1749 阅读 · 0 评论 -
BZOJ 1140 POI2009 KOD 编码 DFS
题目大意:给定一棵二进制编码树,保证每个节点要么有2个儿子,要么没有儿子,每个叶节点代表一个字符,求有多少字符满足即使前面被删掉一个前缀,只要这个字符的编码没有被破坏,就可以保证后面的编码都解读正确先说下这个做法是可以被卡的……首先我们可以发现这样的字符满足【编码树上根节点+任意一个后缀+一些完整的子串+这个字符的转移都能到达一个叶节点】然后打几个标记爆搜就行了……然而这样做的复杂度是∑sizei\原创 2015-05-20 20:20:11 · 1653 阅读 · 0 评论 -
codeforces #547D Mike and Fish 欧拉回路
题目大意:给定平面上的n个点,要求将每个点染成红色/蓝色,使得每行/每列的红色点数和蓝色点数之差≤1\leq 1将每一个横坐标/纵坐标看做一个点,每个点看做一条连接两个坐标的边 现在我们要将每条边染色使得每个点连接的所有边中两种颜色之差≤1\leq 1首先找到度数为奇数的点 这样的点一定有偶数个 将度数为奇数的点两两配对连边,这样所有点的度数就都是偶数了 然后对于每个连通块,任选一个初始度数为原创 2015-05-28 17:14:22 · 2672 阅读 · 0 评论 -
BZOJ 2963 麻将 DFS+动态规划
题目大意:给定一副不全的麻将,从中摸取1414张,求和牌的概率,牌型包括一般牌型/七対子/国士無双这傻逼题我从昨天中午写到现在……答案是分数形式,我们求出和牌的方案数和总方案数C14nC_n^{14},约分一下即可 比较好的一件事情就是C14n≈4.25∗1018C_n^{14}≈4.25*10^{18},刚好不爆long long由于和牌牌型分为三类,所以一般的思路是分别计算三类牌型的概率,然后原创 2015-10-15 01:31:28 · 2952 阅读 · 1 评论 -
BZOJ 1853 SCOI2010 幸运数字 容斥原理+DFS
题目大意:求[l,r]区间内有多少个数是只由6和8组成的数的倍数同2393 链接:http://blog.youkuaiyun.com/popoqqq/article/details/41807333此题数据强力了一些 由于r于是我们可以用double求出LCM的近似值与r进行比较 如果小于r再取精确值进行计算此外就是搜索的时候要从大到小搜 从小到大会TLE#include #inclu原创 2014-12-10 14:44:30 · 1965 阅读 · 0 评论 -
BZOJ 2393 Cirno的完美算数教室 容斥原理+DFS
警告:网上的题解都是误人子弟,看此篇题解之前请将脑海中对其它写于本题解之前的网上常见题解的印象全部消除之后方可阅读此题的数据范围是10^9 但是10^10一样可以做 不影响首先我们可以预处理出1~r以内所有只由2和9构成的⑨数 容易发现最多有1022个但是其中有一些⑨数是另一些的倍数 比如说a是b的倍数 那么一个数如果是a的倍数那么就一定是b的倍数 我们只需要计算b即可 无需计算a 这原创 2014-12-08 19:52:04 · 1694 阅读 · 1 评论 -
BZOJ 3629 JLOI2014 聪明的燕姿 约数和+DFS
题目大意:令f(x)=Σi (i|x) 给定n,求所有的x,使f(x)=n这题就是今年省选第二题,我没看到多组数据爆零了,不然妥妥30分。。。首先约数和公式令n=p1^a1*p2^a2*...*pk^ak则f(n)=(1+p1+p1^2+...+p1^a1)*(1+p2+p2^2+...+p2^a2)*...*(1+pk+pk^2+...+pk^ak)于是我们枚举质数p,采取D原创 2014-09-09 10:05:45 · 3592 阅读 · 7 评论 -
BZOJ 1501 NOI2005 智慧珠游戏 Dancing-Links(DLX)
题目大意:给定一个10*10的三角形棋盘和12种零件,每种零件只能放一次,可以旋转和翻转,一些零件已经放在了上面,求一种方案,使12个零件无重叠地放在棋盘上首先这题目一看就是DLX 但是建图真心恶心 需要枚举每一个零件的最多八个朝向的所有位置 我一开始想要全部代码处理 但是后来发现真做不了于是我选择了打表录入12个零件的所有60种朝向,选择第一排最左面的点作为基点,依次得出每个点关于基点的原创 2014-09-05 11:44:52 · 3807 阅读 · 4 评论 -
HDU 4069 Squiggly Sudoku Dancing-Links(DLX)+Floodfill
题目大意:。。还是数独,不同的是原先的九宫格约束条件变为了给定的任意形状。。。我们跑一遍floodfill 得出每一个格子属于哪一个形状然后就是裸的数独了这题T好不容易改完了 尼玛 交上去就WA最后发现当找到一组解之后 一定要把当前的数独转移到ANS数组中 否则就会被覆盖 导致输出时错误#include#include#include#includeusin原创 2014-09-04 17:38:53 · 1775 阅读 · 0 评论 -
POJ 2676 数独 Dancing-Links(DLX)
题目大意:。。。。数独还用我说么首先一般的解法都是爆搜,爆搜的话绝对懒得做。。于是我作死去学了Dancing-Links数据结构优化的X算法,简称DLX算法Dancing-Links虽然名字好听,但是其实实质就是双向十字链表。。但是由于调试的时候各种挂,指针还看着及其闹心(经常调试链式结构的人一定深有同感),所以只能在调试区各种加指针删指针,来回飞舞的指针,即Dancing-Links。。原创 2014-09-04 13:20:19 · 2165 阅读 · 0 评论 -
BZOJ 2819 Nim 树链剖分/DFS序+LCA+树状数组
题意:给定一棵树,每个节点是一堆石子,给定两种操作:1.改变x号节点的石子数量2.用从x到y的路径上的所有堆石子玩一次Nim游戏,询问是否有必胜策略Nim游戏有必胜策略的充要条件是所有堆的石子数异或起来不为零这题首先一看就是树链剖分 然后题目很善良地告诉我们深搜会爆栈 于是我们可以选择广搜版的树链剖分BFS序从左到右是深搜,从右到左是回溯,一遍BFS就够单点修改区间查询还可原创 2014-09-02 09:30:06 · 2793 阅读 · 0 评论 -
BZOJ 2435 NOI2011 道路修建 BFS/DFS
题目大意:给定一棵树(直接给树,不是给图求生成树!),求每条边权值*两边点数之差的和BFS水过即可其实DFS也能过。。。系统栈可能有些不充裕,我们可以利用内嵌汇编手动开大系统栈 详见代码这题读入优化可以优化掉4s左右#include#include#include#include#define stack_size (20001000)#define M 1001001原创 2014-10-10 15:12:57 · 2338 阅读 · 2 评论 -
BZOJ 1024 SCOI2009 生日快乐 DFS
题目大意:给定一块x*y的蛋糕,切n-1刀分成n块大小相同的块,只能平行于边界切,求长宽比最大值最小虽然求最大值最小但是这题没必要二分答案……直接深搜就可以了枚举切成的两块的面积比,横竖各切一次即可本大爷读入读错了TLE半天……尼玛死的心都有啊#include#include#include#include#includeusing namespace std;doub原创 2014-10-28 08:49:07 · 1687 阅读 · 0 评论 -
BZOJ 1052 HAOI2007 覆盖问题 二分答案+DFS
题目大意:给定n个点,用三个边长相同的正方形覆盖所有点,要求正方形边界与坐标轴垂直,求正方形边长的最小值最大值最小,很明显二分答案但是验证是个问题考虑只有三个正方形,故用一个最小矩形覆盖这三个正方形时至少有一个在角上 若有四个正方形该结论不成立于是我们采用DFS的方式 每次用一个最小的矩形覆盖所有的点,枚举矩形的四个角 将正方形填进去由于最大深度是3,所以时间上完全可以承受原创 2014-10-31 08:45:10 · 1665 阅读 · 0 评论 -
BZOJ 2783 JLOI2012 树 DFS
题目大意:给定一棵有根树,每个节点有权值,求有多少链上的权值和为S,要求链上节点的深度必须单调(即这条链由某个节点出发指向根)DFS一遍,当深搜到一个点时将这个点加入队列,同时队头向后调整,使队列中元素之和当一个点出栈时将队尾删除,同时队头向前调整,使队列中元素之和刚好这题1s略卡时间。。。不过我旁边的哥们用nlogn的算法超时700ms过去的0.0 这怎么过去的0.0 误差也太大了吧原创 2014-10-15 09:27:03 · 1403 阅读 · 2 评论 -
BZOJ 1224 HNOI2002 彩票 DFS
题目大意:在1~m中选n个不同的数 要求和为X/Y 求方案数爆搜的话应该是100E左右 所以考虑加剪枝上下界剪枝 如果当前的情况下剩余的数最大都无法到达目标或最小都无法小于目标 则剪枝#include #include #include #include #define M 200200using namespace std;struct Segtree{ Segt原创 2014-11-21 15:23:50 · 2140 阅读 · 0 评论 -
BZOJ 1486 HNOI2009 最小圈 二分答案+DFS
题目大意:裸的最优比例环直接二分答案+SPFA 这样会T 因为数据卡SPFASPFA在负环非常小的时候会退化成Bellman-Ford 时间复杂度是O(nm) (好像是O(n*m^2)?我忘了)的换一种方法 枚举每个点 从每个点开始DFS 只沿着能将指向的点dis减小的边搜索 搜到栈中的点就返回true期望复杂度O(n^2) 最坏复杂度O(2^n) 这种东西能过我也是醉了- -原创 2015-01-09 10:49:48 · 1454 阅读 · 0 评论 -
BZOJ 2115 Wc2011 Xor DFS+高斯消元
题目大意:给定一个无向图,每条边上有边权,求一条1到n的路径,使路径上权值异或和最大首先一条路径的异或和可以化为一条1到n的简单路径和一些简单环的异或和我们首先DFS求出任意一条1到n的简单路径以及图中所有线性无关的环(一个环不可以被另两个环异或得到)然后在一些数中选出一个子集,使它们与一个给定的数的异或和最大,这就是高斯消元的问题了利用高斯消元使每一位只存在于最多一个数上 然后贪原创 2014-10-05 17:00:07 · 2131 阅读 · 2 评论