摘要: 解法1 玄学剪枝 最暴力的dfs是很好打的 交上去有70 考虑如何剪枝 1.当一个单词首尾和另外一个单词相同时,优先选择最长的那个,其他的不用选。 这一点很好实现,给原数组排个序,dfs的时候写个while特判一下就好 2.卡时自杀式剪枝 你懂我意思吧 以上两个剪枝随便加一个都可以过。。。 解法2 阅读全文
posted @ 2018-10-17 23:09 Patrickpwq 阅读(290) 评论(0) 推荐(0) 编辑
摘要: 其实就是一张图 可知每个点出度为一 由于有环 所以把整个图缩点后会好做得多 在缩点后 每个强联通分量的出度至多为一。 然后我们dfs 直接搜很危险 考虑记忆化 设ans[i]代表第i个强连通分量的答案就好了 详见代码 cpp // luogu judger enable o2 include def 阅读全文
posted @ 2018-10-17 21:34 Patrickpwq 阅读(103) 评论(0) 推荐(0) 编辑
摘要: f[i][j]: i表示整个图走没走过的状态 j表示当前到了第j个点 存的值就是在这种情形下 可以走到的地方的状态 dp[i][j]:i表示整个图走没走过的状态 j表示当前在j点 访问剩余能去到的点的方案数 因此只需要跑一遍DFS就好了 cpp include define int long lon 阅读全文
posted @ 2018-10-17 17:53 Patrickpwq 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 期望是有线性性质的 考虑每个点的概率 由于一个点的子树放了后 它就不能再放了 换句话说 这个点是子树中第一个通电的 也就是说这个点的通电概率是$\frac{1}{size[i]}$ 题目中又说了每个点的编号大于儿子们 于是就不用dfs了 只需递推即可 把所有点的概率相加 那还要求出逆元 这里提供一种 阅读全文
posted @ 2018-10-17 16:13 Patrickpwq 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 用dp[i]来表示状态i下的最优方案,dis[j]表示j到根节点的距离(题目中所描述的K)用dfs来更新答案 cpp include include define INF 2139062143 define N 12 define M 1005 using namespace std; int g[ 阅读全文
posted @ 2018-10-17 13:07 Patrickpwq 阅读(65) 评论(0) 推荐(0) 编辑