0%

网络流是一个图论中很大的知识点,这里只涉及部分内容。本篇只涉及最大流、最小割和费用流的相关知识。

概念

一张有向图 \(G = (V, E)\),对于每条边 \((u, v) \in E\) 都有一个权值 \(c(u, v) > 0\),称为边的 容量。且对于图上没有的边 \((u, v) \notin E\)\(c(u, v) = 0\),则这张图叫做一个 网络,图中有两个特殊的点 \(s \in V\)\(t \in V\),这两个点称为 源点汇点

阅读全文 »

题意描述

LibreOJ 链接

给定一个有 \(n (n \le 2000)\) 个节点的有向无环图,图中某些节点上有棋子,两名玩家交替移动棋子。

玩家每一步可将任意一颗棋子沿一条有向边移动到另一个点,无法移动者输掉游戏。

对于给定的图和棋子初始位置,双方都会采取最优的行动,询问先手必胜还是先手必败。

阅读全文 »

题意描述

POJ 链接

有一张 \(w \times h (2 \le w, h \le 200)\) 大小的矩形网格纸片,两名玩家轮流行动。在每一次行动中,任选一张纸片,沿着某一行或某一列的格线剪成两部分。首先剪出 \(1 \times 1\) 大小纸片的玩家获胜。两名玩家均以最优策略行动,问先手是否有必胜策略。

阅读全文 »

SG 函数是解决博弈论问题的一种方法。

博弈论概念

公平组合游戏

首先我们需要了解以下几个概念。

公平组合游戏指的是一类满足下列条件的游戏:

  1. 有两名玩家交替操作;
  2. 每名玩家可用的操作与玩家的先后无关;
  3. 无法移动的玩家判负。
阅读全文 »

题意描述

洛谷链接

从山顶上到山底下沿着一条直线种植了 \(n\) 棵老树。当地的政府决定把他们砍下来。为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂。

木材只能朝山下运。山脚下有一个锯木厂。另外两个锯木厂将新修建在山路上。你必须决定在哪里修建这两个锯木厂,使得运输的费用总和最小。假定运输每公斤木材每米需要一分钱。

你的任务是编写一个程序,从输入文件中读入树的个数和他们的重量与位置,计算最小运输费用。

数据范围:\(n \le 20000\)

阅读全文 »

题意描述

Codeforces 链接

你有一个长度为 \(n (1 \le n \le 2 \times 10^5)\) 的整数序列 \(a\)

你需要回答 \(q (1 \le q \le 2 \times 10^5)\) 个独立的问题,每次询问如下:

给定 \(l\)\(r\),你可以对序列做若干次操作(也可以不做),每次操作,你需要选择两个数 \(L\)\(R\),其中必须满足 \(l\le L\le R\le r\)\(R-L+1\) 为奇数。然后将 \(a_L\sim a_R\) 的所有数改为 \(a_L\sim a_R\) 的异或和,即 \(a_L\oplus a_{L+1}\oplus \sim \oplus a_R\)

你的目标是将 \(a_l\sim a_r\) 的所有数变为 \(0\)。每次询问完后,序列复原。

询问的答案即为最小操作数。如果总是不能达到目标,则答案为 \(-1\)

阅读全文 »

题意描述

Codeforces 链接

给定 \(s\) 串和 \(t\) 串,其中 \(s\) 串包含小写字母和问号,\(t\) 串只包含小写字母。

假设共有 \(k\) 个问号。

你需要给把每个问号变成一个小写字母,共有 \(26^k\) 种可能。

对于每种可能,设 \(t\) 匹配 \(s\) 的次数为 \(f_i\),请输出 \(\max(f_i)\)

\(1\leq |s|,|t|\leq 10^5,|s|\cdot |t|\leq 10^7\)

阅读全文 »

一文概括 Splay

长文预警

平衡树

Splay 是一种平衡树,可以解决很多序列问题。而平衡树是一种二叉搜索树。

二叉搜索树则是一种数据结构,对于每一个节点,权值满足左儿子小于根节点小于右儿子,且整棵树的中序遍历是排序后的序列。这样二叉搜索树就可以解决很多问题,其时间复杂度取决于树的深度。

于是这里可以引出一种调试平衡树的常见方法:输出这棵树的中序遍历,看中序遍历是否为排序后序列。

然而在特殊数据下,二叉搜索树很容易退化成一颗链,于是就有了一种优化版本:平衡树。平衡树可以让二叉搜索树随时变化,以求深度保持相对较小,即“平衡”。而 Splay 就是一种平衡树。

阅读全文 »

题意描述

洛谷链接

如果一个正整数的二进制表示中,\(0\) 的数目不小于 \(1\) 的数目,那么它就被称为「圆数」。

例如,\(9\) 的二进制表示为 \(1001\),其中有 \(2\)\(0\)\(2\)\(1\)。因此,\(9\) 是一个「圆数」。

请你计算,区间 \([l,r]\) 中有多少个「圆数」。

数据范围:\(1\le l,r\le 2\times 10^9\)

阅读全文 »