A6422 | 「USACO 2021 US Open Platinum」Routing Schemes
时间限制2s
内存限制256MB
通过 / 提交0/0
题目描述
**题目来自 [USACO 2021 US Open Contest, Platinum](http://usaco.org/index.php?page=open21results) Problem 2. [Routing Schemes](http://usaco.org/index.php?page=viewproblem2&cpid=1141&lang=zh)**
考虑一个由 $N$($2\le N\le 100$)个编号为 $1\ldots N$ 的结点组成的网络。每个结点被指定为发送者(sender)、接收者(receiver)或两者均不是。发送者的数量 $S$ 与接收者的数量相等($S\ge 1$)。
这一网络中结点间的连接关系可以用一系列形式为 $i\to j$ 的有向边表示,代表由结点 $i$ 可以路由到结点 $j$。有趣的是,所有的边满足性质 $i<j$,除了 $K$ 条满足 $i>j$($0\le K\le 2$)。网络中没有自环($i\to i$ 形式的边)。
一个「路由方案」的描述由 $S$ 条从发送者到接收者的有向路径组成,其中没有两条路径有相同的起止点。也就是说,这些路径将不同的发送者连接到不同的接收者。一条从发送者 $s$ 到接收者 $r$ 的路径可以用一个结点序列
$$ s=v_0\to v_1\to v_2\to \ldots \to v_e=r $$
表示,其中对于所有 $0\le i<e$,有向边 $v_i\to v_{i+1}$ 均存在。一个结点可能在同一条路径中出现多于一次。
计算使得每条有向边恰好使用一次的路由方案数量。由于答案可能非常大,输出答案对 $10^9+7$ 取模的结果。输入保证存在至少一种路由方案符合条件。
每个输入包含 $T$($1\le T\le 20$)组需要独立求解的测试用例。输入保证所有测试用例的 $N^2$ 之和不超过 $2\cdot 10^4$。
考虑一个由 $N$($2\le N\le 100$)个编号为 $1\ldots N$ 的结点组成的网络。每个结点被指定为发送者(sender)、接收者(receiver)或两者均不是。发送者的数量 $S$ 与接收者的数量相等($S\ge 1$)。
这一网络中结点间的连接关系可以用一系列形式为 $i\to j$ 的有向边表示,代表由结点 $i$ 可以路由到结点 $j$。有趣的是,所有的边满足性质 $i<j$,除了 $K$ 条满足 $i>j$($0\le K\le 2$)。网络中没有自环($i\to i$ 形式的边)。
一个「路由方案」的描述由 $S$ 条从发送者到接收者的有向路径组成,其中没有两条路径有相同的起止点。也就是说,这些路径将不同的发送者连接到不同的接收者。一条从发送者 $s$ 到接收者 $r$ 的路径可以用一个结点序列
$$ s=v_0\to v_1\to v_2\to \ldots \to v_e=r $$
表示,其中对于所有 $0\le i<e$,有向边 $v_i\to v_{i+1}$ 均存在。一个结点可能在同一条路径中出现多于一次。
计算使得每条有向边恰好使用一次的路由方案数量。由于答案可能非常大,输出答案对 $10^9+7$ 取模的结果。输入保证存在至少一种路由方案符合条件。
每个输入包含 $T$($1\le T\le 20$)组需要独立求解的测试用例。输入保证所有测试用例的 $N^2$ 之和不超过 $2\cdot 10^4$。
输入格式
输入的第一行包含 $T$,为测试用例的数量。
每个测试用例的第一行包含整数 $N$ 和 $K$。注意 $S$ 并不会在输入中明确给出。
每个测试用例的第二行包含一个长为 $N$ 的字符串。如果第 $i$ 个结点是发送者,则字符串的第 $i$ 个字符为
每个测试用例的以下 $N$ 行每行包含一个长为 $N$ 的 $01$ 字符串。如果从结点 $i$ 到结点 $j$ 存在一条有向边,则第 $i$ 行的第 $j$ 个字符为 $1$,否则为 $0$。由于不存在自环,矩阵的主对角线仅包含 $0$。除此之外,在主对角线以下恰好有 $K$ 个 $1$。
为提高可读性,相邻的测试用例之间用一个空行隔开。
每个测试用例的第一行包含整数 $N$ 和 $K$。注意 $S$ 并不会在输入中明确给出。
每个测试用例的第二行包含一个长为 $N$ 的字符串。如果第 $i$ 个结点是发送者,则字符串的第 $i$ 个字符为
S,如果第 $i$ 个结点是接收者则为 R,如果第 $i$ 个结点两者均不是则为 .。字符串中 R 的数量等于 S 的数量,且至少有一个 S。每个测试用例的以下 $N$ 行每行包含一个长为 $N$ 的 $01$ 字符串。如果从结点 $i$ 到结点 $j$ 存在一条有向边,则第 $i$ 行的第 $j$ 个字符为 $1$,否则为 $0$。由于不存在自环,矩阵的主对角线仅包含 $0$。除此之外,在主对角线以下恰好有 $K$ 个 $1$。
为提高可读性,相邻的测试用例之间用一个空行隔开。
输出格式
对每个测试用例,输出每条边使用恰好一次的路由方案的数量,结果对 $10^9+7$ 取模。输入保证对每个测试用例存在至少一种合法的路由方案。
输入输出样例
输入 #1
2 8 0 SS....RR 00100000 00100000 00011000 00000100 00000100 00000011 00000000 00000000 13 0 SSS.RRRSS.RR. 0001000000000 0001000000000 0001000000000 0000111000000 0000000000000 0000000000000 0000000000000 0000000001000 0000000001000 0000000000110 0000000000000 0000000000000 0000000000000
输出 #1
4 12
输入 #2
2 5 1 SS.RR 00101 00100 10010 00000 00000 6 2 S....R 001000 000100 010001 000010 001000 000000
输出 #2
3 1
输入 #3
5 3 2 RS. 010 101 100 4 2 .R.S 0100 0010 1000 0100 4 2 .SR. 0000 0011 0100 0010 5 2 .SSRR 01000 10101 01010 00000 00000 6 2 SS..RR 001010 000010 000010 000010 100101 000000
输出 #3
2 1 2 6 24
- 测试点 4-5 满足 $N\le 6$。
- 测试点 6-7 满足 $K=0$。
- 测试点 8-12 满足 $K=1$。
- 测试点 13-24 满足 $K=2$。
供题:Benjamin Qi
- 测试点 6-7 满足 $K=0$。
- 测试点 8-12 满足 $K=1$。
- 测试点 13-24 满足 $K=2$。
供题:Benjamin Qi
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?