[luoguP1131] [ZJOI2007]时态同步(贪心)传送门显然是一棵树。又显然一段一段地增加比较优。我们可以dfs,并且尽量把每一个节点所有子树中所有节点的时间增加到一样。#include <vector>#include <cstdio>#include <c
[BZOJ2393] Cirno的完美算数教室(dfs+容斥原理)传送门先通过dfs预处理出来所有只有2和9的数,也就大概2000多个。想在[L,R]中找到是这些数的倍数的数,可以通过容斥原理那么如果a % b == 0,那么便可以把 a 去掉,因为 b 的倍数肯
[BZOJ1576] [Usaco2009 Jan]安全路经Travel(堆优化dijk + (并查集 || 树剖))传送门
蒟蒻我原本还想着跑两边spfa,发现不行,就gg了。
首先这道题卡spfa,所以需要用堆优化的dijkstra求出最短路径
因为题目中说了,保证最短路径有且只有一条,所以可以通过dfs
[BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)传送门
告诉你一些点不能到达1,由于是双向边,也就是1不能到达那些点
那么从1开始dfs,如果当前点能到达不能到达的点,那么当前点就是损坏的。
#include <cstdio>
#include <c
[luoguP2962] [USACO09NOV]灯Lights(高斯消元 + dfs)传送门
先进行高斯消元
因为要求最少的开关次数,那么:
对于关键元,我们可以通过带入消元求出,
对于自由元,我们暴力枚举,进行dfs,因为只有开关两种状态,0或1
#include <cmath>
#
[luoguP1494] 岳麓山上打水 && [luoguP2744] [USACO5.3]量取牛奶Milk Measuring传送门
传送门
dfs选取集合,dp背包判断
虽然我觉的会TLE。。
但是的确是AC了
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define
[luoguP1013] 进制位(搜索)传送门
纯搜索,无优化!
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 10
using namespace std;
int n, m, f;
int c[30
[luoguP1074] 靶形数独(搜索)传送门
75分,太菜,不会优化了,吐了。
几点优化。
1.先搜索容易确定的位置
2.从中心往周围搜
3.枚举数字的时候倒序枚举
4.如果没有枚举到的数字都是最优情况的话也不能比当前
[luoguP1041] 传染病控制(DFS)传送门
n <= 300
结果裸的dfs就直接过了。。
枚举每一层,枚举删除每一层的边,然后把删除的边所连接的子树全部删去
代码
#include <vector>
#include <cstdio>
#include <
[luoguP1021] 邮票面值设计(DFS + dp)传送门
数据很小,可以DFS,判断的时候用背包DP
然而不知到枚举到哪里。。。。
首先枚举前可以求一遍题目中的MAX,下一层DFS的时候可以只枚举到MAX + 1,因为再往上就必定会出现
[luoguP1019] 单词接龙(DFS)传送门
不知为什么,判断全部包含反而A不了,不判断反而A了,╮(╯▽╰)╭
代码
#include <cstdio>
#include <iostream>
#define max(x, y) ((x) > (y) ? (x) : (y))
using
[luoguP3565] [POI2014]HOT-Hotels(dfs)传送门
三点在树上距离相等的情况只有一种,就是以某一个点为中心,三个点到这个点的距离相等。
所以直接枚举每个点作为中心,dfs这个中心的子树,根据乘法原理统计答案即可。
时
[luoguP2680] 运输计划(lca + 二分 + 差分)传送门
暴力做法 50 ~ 60
枚举删边,求最大路径长度的最小值。
其中最大路径长度运用到了lca
我们发现,求lca的过程已经不能优化了,那么看看枚举删边的过程能不能优化。
先把
[luoguP1433] 吃奶酪(DP || Dfs)传送门
深搜加剪纸可A(O(玄学) 1274ms)
——代码
1 #include <cmath>
2 #include <cstdio>
3 #include <iostream>
4
5 int n;
6 double ans = ~(1 << 31), a[16],
[luoguP1351] 联合权值(Dfs)传送门
距离为2的点会产生权值,第一问,只需要在dfs的时候把一个点相邻的点都处理出来就行。
具体处理方式看代码,然而这样只处理了一遍,最后在乘2就好了。
第二问只需要处理一
[BZOJ1179] [Apio2009]Atm(tarjan缩点 + spfa)传送门
题意
N个点M条边的有向图
每个点有点权
从某一个结点出发
问能获得的最大点权和
一个点的点权最多被计算一次
N<=500000 M<=500000
思路
先tarjan缩点,然后就形成
[luoguP2982][USACO10FEB]慢下来Slowing down(dfs序 + 线段树)传送门
这个题显然可以用树链剖分做。
然而线段树也能做。
每个点都对它的子树有贡献,所以先求一边 dfs序,然后直接在 dfs序 中搞 线段树 就行。
——代码
1 #include <
[luoguP2444] [POI2000]病毒(AC自动机 + dfs)传送门
先把所有串建一个AC自动机,
如果要找一个不包含任意一个串的串,
说明这个串一直在AC自动机上匹配但匹配不到,
也就是说,匹配时除去val值为1的点,除去fail指针指向val值
[luoguP3178] [HAOI2015]树上操作(dfs序 + 线段树 || 树链剖分)传送门
树链剖分固然可以搞。
但还有另一种做法,可以看出,增加一个节点的权值会对以它为根的整棵子树都有影响,相当于给整棵子树增加一个值。
而给以某一节点 x 为根的子树增
[luoguP2420] 让我们异或吧(dfs + 异或的性质)传送门
因为异或满足结合律和交换律。
a^b^b=a
所以这个题直接求根节点到每个点路径上的异或值。
对于每组询问直接输出根到两个点的异或值的异或的值。
——代码
1
NOIP2009T3最优贸易(Dfs + spfa)洛谷传送门
看到这个题,原本想先从后往前dfs,求出能到终点的点,再在这些点里从前往后spfa,用一条边上的两个城市的商品价格的差来作边权,实施过后,发现图中既有负边权,又有回路,以









