搜索:DFS
文章平均质量分 91
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
UESTC 1252 24点游戏 DFS
题目挺棒的☺☺☺☺☺☺24点就是给你一串数字,问你是否通过加减乘除括号构成24点。沈爷觉得这个很好玩,就决定考考你,给你4个数,可以交换位置,可以用加减乘除和括号,是否能构成24点呢?注意哦~这里的除法并不是整数除法,比如样例Input第一行T,表示有多少组测试数据,1≤T≤50接下来T行,每行4个正整数a1, a2, a3, a4,表示每个数都是多少,1≤ai≤13Output对于每一次询问,如果能够凑成24点,输出yes,否则输出no原创 2015-12-07 00:14:33 · 1334 阅读 · 3 评论 -
Codeforces Round #385 (Div. 2) C. Hongcow Builds A Nation 并查集+贪心+组合学、图论、dfs
题意:有n个点(其中有k个关键点),m条边,要求添加尽可能多的边使得k个关键点之间没有路径,问最多可以添加多少条边。并查集+贪心+组合学、图论、dfs用并查集处理这个图,相关联的点构成一颗树,然后把每棵树的结点数储存在该树的根节点上,然后开始贪心,找出k个关键点里,关键点所在树的结点个数最多的结点 maxci,然后把这个ci 以及它所关联的点 与 所有没有关键点出现的树相结合(free),形成一个连通块,这个连通块的总边数是 (free + maxcnt) * (free + maxcnt - 1)原创 2017-01-10 23:20:45 · 750 阅读 · 0 评论 -
Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan dfs+最小公倍数
题意:当一个人开始是另一个人结束,但这个人开始时前面那个人结束,具体还是请看题吧,哈哈dfs+最小公倍数每个人只能且必须处于一个环中,自环也是环,如果环的元素个数是奇数则这个环必须是ansi = k*cnt,如果是偶数则 ans = k * (cnt / 2);//这个是自己画图发现的规律。这题不用多想什么优化的方法,搞复杂了反而容易错(比如笔者自己 T _ T ),n <= 100,直接对于每一个点每层dfs时cnt++,直到找到 目标 find(u, v),,或者找到根节点时,或者 cnt >原创 2017-01-10 18:38:14 · 683 阅读 · 0 评论 -
Codeforces Round #381 (Div. 2) D. Alyona and a tree dfs+二分+线段树延迟操作、树形化线性
题意:一颗树,以有向图的方式读入,每个节点都有一个权值,每条边也有一条权值,当u在v的子树中,且u到v的边权和 <= u的点权时称v可以控制u。求出每个点可以控制 的结点的个数。dfs+二分+线段树延迟操作、树形化线性线段树延迟操作区间修改单点查询 O(nlogn)前缀和sum[ptr]维护的是u到根的路径上的边权和 O(n)用 树形转化为线性的思想 做,dfs到u的子节点v时,用二分的方法找到最靠近根的节点lr, 然后用把[lr, ptr-1]加1。当当前结点u,开始回溯的时候,此时单点查询,线原创 2016-11-27 17:26:36 · 845 阅读 · 0 评论 -
Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) D. Generating Sets __ dfs+优先队列+贪心
dfs+优先队列+贪心向把数读入到priority_queue, 同时用 map<int, bool> mp来标记这些数字,出现过。然后每次贪心的取最大的值,u = pq.top(), mp[u] = false; 然后dfs的向下推可行的一步,比如 13 到 6 如果可以就标记并返回,否者继续向下找。如果最大值已经不能向下推了,则pq里维护着的元素就是答案了。此外,这个方法对于 n == 1时要特殊处理, 不然n == 1的时候 一直mp[1] = false,然后dfs(1),这样每次flag都原创 2016-10-03 22:11:22 · 817 阅读 · 0 评论 -
Codeforces Round #375 (Div. 2) D. Lakes in Berland __ dfs+贪心+小根堆
dfs+贪心+小根堆枚举所有未被标记过的 '.' 点, 先跑一遍dfs,如果是湖(没有到四周边界),则再跑一边来找出这个湖的大小,并记录在小根堆里 pq.push(ii(cnt, make_pair(i, j)));然后对于pq里最小的前 pq.size() - k 个湖,跑一遍dfs把湖填上。//初始坐标为 (pq.top().second.first, pq.top().second.second)然后MLE了,其实应该TLE吧,嘿嘿dfs的时候没有处理本次dfs时访问过的点,所以可能跳不出递归原创 2016-10-16 11:45:17 · 845 阅读 · 0 评论 -
Codeforces Round #363 (Div. 2) D. Fix a Tree __ dfs+剪枝+标记数组
dfs+剪枝+标记数组找到第一个环把其中的一个点作为 root,然后每个环切去一条边。找root的时候优先找自环的环,如果有自环的环,则 剩余的环每个环去掉一条边把环连到root上 环的个数 - 1 个操作;如果没有自环的环,则有 环的个数 个操作。具体操作 用dfs+标记数组实现,且需要剪枝不然可能有大量重复或者部分重复的dfs用 bool flag[maxn]表示本次dfs访问过的点,当出现 flag[fatehr[v]] == true 时有环,且flag数组要在dfs回溯的时候重置好,方便原创 2016-09-29 00:00:40 · 1107 阅读 · 0 评论 -
Codeforces Round #369 (Div. 2) D. Directed Roads 图论、组合学、二重dfs、并查集形式的图、Interesting、好题
图论、组合学、 二重dfs、并查集形式的图、Interesting、好题可以把图分成两部分, 另一部分是链状的 方案数是 2^k次(k条边), 一部分是很多的环((C m, 1) + (C m, 2) + (C m, 3) + ...... + (C m, m - 1) == 2^m - 1 - (C m, m) == 2^m - 2)并查集形式的图, 一个节点自由一个父节点, 可能有环 father[ i ] = ai;每个i, dfs, 访问到这个i访问过的节点是, 说明 有环, 然后进行 ind原创 2016-09-06 19:06:06 · 798 阅读 · 0 评论 -
Gym 100952E E. Arrange Teams dfs、剪枝
dfs、剪枝首先用 pai[][]布尔数组双向的记录 那些 pair然后void dfs(int k) 表示当前正在处理 队伍 k, 然后遍历 所有 i, j 如果没有访问过, 并且满足条件 则dfs(k + 1)直到顺利的把所以的t个队伍都填进去了, 那一个分枝才ans++; return;剪枝以后的复杂度不大算的出来, 嘿嘿, 但看数据大小 (1 ≤ n,m ≤ 11) and (1 ≤ t ≤ 10) 这样做一般可以pass the tests原创 2016-08-11 01:14:29 · 1017 阅读 · 0 评论 -
Gym 100952H Special Palindrome 非递减的回文串、dfs打表、查数列网站OEIS
非递减的回文串、打表比赛结束后看了下public 的代码就我们队是打表过的, 别人都是正规的过的, ⊙﹏⊙‖∣尴尬分奇偶用 dfs 搞出非递减的左半边串, 然后求出这个的和 ans[sum + i]++;对于偶数个的直接dfs, 对于奇数的则枚举mid, 然后依次dfs然后只打了前ans[50] 及以前的, 因为后面的比较大时间不够的, 所以打出前50的表然后到数列网站 OEIS 查了一下, 还真有,☺☺所以把那前250个ans贴到 txt里, 然后写一个中间程序 把这些数据 转换成 printf原创 2016-08-10 01:43:40 · 2133 阅读 · 3 评论 -
UESTC 2016 Summer Training #1 Div.2 J - Objects Panel (A) dfs、按条件遍历树、interesting
dfs, 用前向星存储树状结构然后根据条件遍历, 然后根据要求输出就好了然后这个题目的数据是有问题的 The state of objects that do not have any nested objects will be '-'.因此叶子必然为 '-', 不可能出现 + 0 这样的数据, 但是test 7好像就是这样的数据, 虽然据说是Codeforces的题, 但确实数据是有问题的这样导致 先判断是否为 +-再在 '-'的情况下讨论 是否为叶子 WA7题目中那么必须 先判断是否为原创 2016-07-12 22:00:57 · 1617 阅读 · 0 评论 -
UESTC 2016 Summer Training #1 Div.2 L - Plus or Minus (A) dfs
dfs就好, 好久没用写dfs了,简单dfs还是Debug了好长时间, 尴尬⊙﹏⊙‖∣记得把那些转移的东西写在参数里读入char类型, 记得看看要不要用getchar吸掉换行空格什么的原创 2016-07-12 21:32:05 · 1557 阅读 · 0 评论 -
2016 UESTC Training for Search Algorithm & String E - 吴队长征婚 dfs剪枝、好题
好复杂的搜索剪枝(┬_┬) 看了原题的一些结题报告 1. 搜索顺序。首先依据小棒长度进行由大到小的排序,在每一层搜索时首先将长度大的小棒填入 当前原棒中。因为当相对长的小棒占据了原棒的大部分空间后能大大减小可行的搜索状态。 2. 利用排序剪枝。在组合同一支原棒的时候,由于检验小棒是否可用的顺序也是由大到小的,因此在检验到一支小棒可用时,如果当前棒还合填满,可能填入当前棒的小棒的长度也不会比现在填入的这支小棒长。因此,增加一个递归参数NEXT表示可能用于组合当前棒的第一支原创 2016-06-10 10:54:44 · 816 阅读 · 0 评论 -
2016 UESTC Training for Search Algorithm & String A - Xiper的奇妙历险(1) 八皇后问题、dfs
八皇后问题这里是九个皇后逐行放置,则皇后肯定不会横向攻击,只需要检查纵向和两个斜向攻击即可其中用 cur - C[cur] == j - C[j] || cur + C[cur] == j + C[j] 来判断是否有斜向攻击用 C[cur] == C[j] 检查纵向攻击然后每次 cur == n 的时候这一钟情况就完成了, 把这个C[0~n-1] 存储到ans[tot][i]里最后全部返回了 就得到了所有答案然后for for 打印即可原创 2016-06-10 10:50:21 · 1379 阅读 · 0 评论 -
Gym - 101174K Balls and Needles DFS+建图+复合判断环
题意:给出三维空间的n条边,每个点都是三维坐标,分别判断三维图有没有环,以及投影到xy坐标平面有没有环。dfs对于三维图只要建图后用dfs跑一遍即可, 注意{u = (x, y, z), v = (x, y, z)}这样的边(点)不能放到图上,对于二维图则在不把{u = (x, y), v = (x, y)}不放到图上之外,每次跑dfs的时候还要用unique去重,//sz = unique(sons[u].begin(), sons[u].end()) - sons[u].begin();因为在跑原创 2017-07-20 11:22:51 · 1547 阅读 · 0 评论