DFS
Love_xyh
这个作者很懒,什么都没留下…
展开
-
[HNOI2013]比赛
加了一堆不改变分数的没用剪枝以后,才发现这题是可以记忆化的… 对于若干个人,如果这若干人的现有分数,在之前出现过,那么就直接把之前的记忆化的值拿来用就好了。 一个人最多比9场,最多获得27分,所以我们可以用一个28进制的数,来表示:当前剩下的人,剩下的分数的状态。这个值,可以用map来存储。 注意map查找时用find函数,因为有可能这种情况之前遇到过,但是答案为0,而find函数对于赋值过但是值为0也可以表现。 #include <bits/stdc++.h> #define int long原创 2020-09-15 22:39:56 · 117 阅读 · 0 评论 -
BZOJ 2079: [POI2010]GIL-Guilds
给定一张图,让对这张图进行染色,可以染黑,白,灰三种颜色。 要求: 1.黑点旁必须有一个白点; 2.白点旁必须有一个黑点; 3.灰点旁必须有一个白点,一个黑点。 问,是否能够染色成功。 显然,灰点是没有用的,并且,只要没有单独的一个点,那么就一定能成功,所以在特判有没有单独的一个点后,就成了一道简单构造题。O(n+e)的简单dfs即可。 #include <bits/stdc++.h>...原创 2019-12-29 13:36:39 · 148 阅读 · 0 评论 -
BZOJ 1529: [POI2005]SKA-Piggy Banks
一眼看又是一道O(n+e)的dfs解决的简单题,对于一个点i来讲,如果它的钥匙放在u点上,那么就连一条u到i的有向边,结果错了… 这不是最优啊…因为对于一个联通块来说,选择一个正确的起点,可以使得答案更优,所以我们就再连一条i到u的边,这样就可以做到:我不用知道我应该选哪个最优的点,但是我就是能够得到“选出最优点得到的答案”。 #include <bits/stdc++.h> usin...原创 2019-12-29 13:42:40 · 144 阅读 · 0 评论 -
[SCOI2010]幸运数字
预处理出幸运数,把有倍数关系的两个数中较大的数删掉,从大到小排序组成真幸运数数列。 再用DFS来进行容斥。 区间查询[l,r]可以转换为 前缀r的值 减去 前缀l-1的值。 注意剪枝:当前要算贡献的数大于r时,退出。 #include <bits/stdc++.h> #define int long long using namespace std; int n,tot,l,r,ans; int a[3000]; bool pd[3000]; void dfs(int x,int sum)原创 2020-08-06 15:12:34 · 212 阅读 · 0 评论 -
AT1981 [AGC001C] Shorten Diameter
枚举树的每一节点为根后,每次做一次深度计算,时间复杂度O(n^2)。 注意根据直径k的奇偶性分情况讨论。 #include <bits/stdc++.h> using namespace std; const int N=2e3+5; int n,k,sum,ans; int u[N],v[N],d[N]; int cnt,head[N]; struct edge{int next,to;}e[N<<1]; inline void add(int u,int v) { cnt++原创 2020-08-31 10:23:28 · 155 阅读 · 0 评论