记录一点在 BZOJ 上做的题。

众所周知原 BZOJ 炸掉了,于是跑去了 HydroOJ 的 BZOJ 域上面做。

目录

  • P1001 [Beijing2006]狼抓兔子
  • P1002 [FJOI2007]轮状病毒

P1001 [Beijing2006]狼抓兔子

Description

一个 \(n\times m\) 网格图,对于每个点 \((x,y)\),分别有一条无向边连向 \((x+1,y)\),\((x,y+1)\),\((x+1,y+1)\),删去一条无向边需要代价,求最终使得 \((1,1)\) 和 \((n,m)\) 之间不联通的最小代价。

数据范围:\(3\leqslant n,m\leqslant 10^3\),每条边删去的代价不超过 \(10^6\)。

Solution

根据最小割的定义可知,这题就是让我们求一个无向网格图 \((1,1)\) 和 \((n,m)\) 的最小割,于是我们套路地利用最大流-最小割定理将求最小割转化为求最大流,建图跑最大流就可以了。

Code

  1. namespace Solution {
  2. const int N = 1e3 + 7;
  3. int n, m, w, S = 1, T, cnt = 1, dep[N * N], h[N * N];
  4. struct edge {int v, to, nxt;}e[N * N * 6];
  5. ii ID(int x, int y) {return (x - 1) * m + y;}
  6. iv a_e(int u, int v, int w) {e[++cnt] = (edge){w, v, h[u]}; h[u] = cnt;}
  7. iv A_E(int u, int v, int w) {a_e(u, v, w), a_e(v, u, w);}
  8. ib bfs() {
  9. memset(dep, -1, sizeof(dep));
  10. queue<int> Q; dep[S] = 0, Q.push(S);
  11. while(!Q.empty()) {
  12. int x = Q.front(); Q.pop();
  13. for(int i = h[x]; i; i = e[i].nxt) {
  14. int v = e[i].to;
  15. if(dep[v] >= 0 || e[i].v <= 0) continue;
  16. dep[v] = dep[x] + 1, Q.push(v);
  17. }
  18. }
  19. return ~dep[T];
  20. }
  21. ii dfs(int x, int mnflow) {
  22. if(x == T) return mnflow;
  23. if(!mnflow) return 0;
  24. int res = 0;
  25. for(int i = h[x]; i; i = e[i].nxt) {
  26. int v = e[i].to;
  27. if(e[i].v <= 0 || dep[v] != dep[x] + 1) continue;
  28. int flow = dfs(v, min(e[i].v, mnflow));
  29. e[i].v -= flow, e[i ^ 1].v += flow, mnflow -= flow, res += flow;
  30. }
  31. if(!res) dep[x] = -1;
  32. return res;
  33. }
  34. ii Dinic() {int ans = 0; while(bfs()) ans += dfs(S, iinf); return ans;}
  35. iv Main() {
  36. read(n, m), T = n * m;
  37. F(int, i, 1, n) F(int, j, 1, m - 1) read(w), A_E(ID(i, j), ID(i, j + 1), w);
  38. F(int, i, 1, n - 1) F(int, j, 1, m) read(w), A_E(ID(i, j), ID(i + 1, j), w);
  39. F(int, i, 1, n - 1) F(int, j, 1, m - 1) read(w), A_E(ID(i, j), ID(i + 1, j + 1), w);
  40. write(Dinic());
  41. return;
  42. }
  43. #undef int
  44. }

P1002 [FJOI2007]轮状病毒

Description

求一个 \(n\) 轮状基能够变成多少种 \(n\) 轮状病毒。

轮状基和轮状病毒的定义见原题面。

数据范围:\(1\leqslant n\leqslant 100\)。

Solution

这里给大家介绍的是 OEIS 做法。

我们利用暴力手玩一下 \(n=1,2,4\) 的情况,发现答案分别是 \(1,5,45\)。

然后,我们将 \(1,5,16,45\) 这个数列放进 OEIS 中查找,会找到一个叫做 \(\text{Alternate Lucas numbers-2}\) 的这么一个东西。接着,我们在这个条目下面翻,翻到 FORMULA 部分,发现有个很 simple 的递推公式:

\[a_n = \begin{cases}4a_{n-1} - 4a_{n-2} + a_{n-3}&n\geqslant 3\\0&n=0\\1&n=1\\5&n=2\end{cases}
\]

然后就没了,直接用这个递推公式推出结果即可。注意,答案可能很大,要用高精。下面给出的是自带高精的 Python 3 代码。

Code

  1. n = int(input())
  2. a = [0, 1, 5]
  3. for i in range(3, n + 1):
  4. a.append(4 * a[i - 1] - 4 * a[i - 2] + a[i - 3])
  5. print(a[n])

在线蹲一个证明方法。

BZOJ 题目乱做的更多相关文章

  1. bzoj 题目选做

    这里将记录着我在接下来的日子里在bzoj上遇到的各种 毒瘤题目 1.轮状病毒 题目是很没意思的 列出状态 显然无法递推 我简单推了一下加动态加点的状态 嗯发现规律没有那么简单 打表 也不太能发现吧 正 ...

  2. CodeForces 题目乱做

    是个补题记录. 1419 除了 F 场上都过了. CF1419A Digit Game 这题好多人 FST 啊-- 考虑如果串长为奇数那么最后操作的肯定是第一个人,串长为偶数的最后操作的肯定是第二个, ...

  3. jzyz 题库 题目选做

    题库中也有很多我想不出来的模拟赛的题目.做还是必要的.做自己的题目 时间很紧 想想自己的文化课 我又没有那么强 我必须得刷. LINK:水题一道 发现是一道计数题 计数题拿高分的才是王者,但是 计数题 ...

  4. 2017国家集训队作业Atcoder题目试做

    2017国家集训队作业Atcoder题目试做 虽然远没有达到这个水平,但是据说Atcoder思维难度大,代码难度小,适合我这种不会打字的选手,所以试着做一做 不知道能做几题啊 在完全自己做出来的题前面 ...

  5. 基尔霍夫矩阵题目泛做(AD第二轮)

    题目1: SPOJ 2832 题目大意: 求一个矩阵行列式模一个数P后的值.p不一定是质数. 算法讨论: 因为有除法而且p不一定是质数,不一定有逆元,所以我们用辗转相除法. #include < ...

  6. 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做

    题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. #include <cstdlib> #in ...

  7. FFT与多项式、生成函数题目泛做

    题目1 COGS 很强的乘法问题 高精度乘法用FFT加速 #include <cstdlib> #include <iostream> #include <algorit ...

  8. 生成树题目泛做(AD第二轮)

    题目1: NOI2014 魔法森林 LCT维护MST.解题报告见LOFTER #include <cstdio> #include <iostream> #include &l ...

  9. bzoj题目分类

    转载于http://blog.csdn.net/creationaugust/article/details/513876231000:A+B 1001:平面图最小割,转对偶图最短路 1002:矩阵树 ...

随机推荐

  1. ICCV2021 | PnP-DETR:用Transformer进行高效的视觉分析

    ​  前言  DETR首创了使用transformer解决视觉任务的方法,它直接将图像特征图转化为目标检测结果.尽管很有效,但由于在某些区域(如背景)上进行冗余计算,输入完整的feature maps ...

  2. Codeforces 1368H - Breadboard Capacity(最小割+线段树维护矩阵乘法)

    Easy version:Codeforces 题面传送门 & 洛谷题面传送门 Hard version:Codeforces 题面传送门 & 洛谷题面传送门 首先看到这种从某一种颜色 ...

  3. Codeforces 671C - Ultimate Weirdness of an Array(线段树维护+找性质)

    Codeforces 题目传送门 & 洛谷题目传送门 *2800 的 DS,不过还是被我自己想出来了 u1s1 这个 D1C 比某些 D1D 不知道难到什么地方去了 首先碰到这类问题我们肯定考 ...

  4. 51nod 1709 复杂度分析

    51nod 1709 复杂度分析 考虑定义 $ F(x) $ 为 \(x\) 为根的子树所有点与 $ x $ 的深度差(其实就是 $ x $ 到每个子树内点的距离)的 1 的个数和. 注意,$ F(x ...

  5. DTOJ 1561: 草堆摆放

    题目描述 FJ买了一些干草堆,他想把这些干草堆分成N堆(1<=N<=100,000)摆成一圈,其中第i堆有B_i数量的干草.不幸的是,负责运货的司机由于没有听清FJ的要求,只记住分成N堆摆 ...

  6. php header下载文件 无法查看原因

    php header下载文件 无法查看原因 php header下载文件 下方函数可以下载单个文件 function download($file_url){ if(!isset($file_url) ...

  7. 关于写SpringBoot+Mybatisplus+Shiro项目的经验分享一:简单介绍

    这次我尝试写一个原创的项目 the_game 框架选择: SpringBoot+Mybatisplus+Shiro 首先是简单的介绍(素材灵感来自英雄联盟) 5个关键的表: admin(管理员): l ...

  8. Tikz绘制形似万花尺的图片

    初中时意外发现数学课本上有这么一个好玩的图 大概就是把两条相等线段A.B分为10个小段并在点上标序号,A线段1点连B线段9点,2点连8点,依次类推. 假设有这么一个框架图 按照第一张图的方式进一步绘图 ...

  9. ZooKeeper 04 - ZooKeeper 集群的节点为什么必须是奇数个

    目录 1 - 关于节点个数的说明 2 - ZooKeeper 集群的容错数 3 - ZooKeeper 集群可用的标准 4 - 为什么不能是偶数个节点 4.1 防止由脑裂造成的集群不可用 4.2 奇数 ...

  10. C#序号

    OnRowCreated="gridViewCorrection_RowCreated" <asp:BoundField HeaderText="序号" ...