#CF1866C. 彻底搜索逆序对
彻底搜索逆序对
彻底搜索逆序对
- 时间限制:2 秒
- 内存限制:512 MiB
题目描述
给定一个有 个顶点的有向无环图。顶点 有 条出边;它的第 条出边指向 ,边权为 。保证从顶点 出发可以到达所有顶点。
初始有一个空数组 。定义函数:
void dfs(int i) {
for (int j = 1; j <= S[i]; ++j) {
Z.push_back(W[i][j]);
dfs(L[i][j]);
}
}
函数不会记录已经访问过的顶点,因此同一顶点可能被处理多次。
执行一次 $ exttt{dfs(1)}Z$ 只包含 和 。求 的逆序对数量,即满足 且 的下标对 数量。答案对 取模。
输入格式
第一行包含整数 。
随后依次给出顶点 到 的信息。顶点 的第一行包含整数 ;接下来的 行,每行包含两个整数 ,按输入顺序描述第 条出边。
图中没有重边和有向环;从顶点 可以到达所有顶点。
输出格式
输出 的逆序对数量对 取模后的结果。
样例输入 1
5
2
4 0
3 1
0
1
2 0
2
3 1
5 1
0
样例输出 1
4
样例说明
执行过程如下图所示:

最终 ,四个逆序对是 。
数据范围
- ;
- ;
- ;
- ;
- 。
| 子任务编号 | 分值 | 特殊限制 |
|---|---|---|
| 1 | 20 | 给定的图是一棵以顶点 为根的有向树 |
| 2 | 40 | |
| 3 | 无特殊限制 |