#CF2080A. 强连通再度出击
强连通再度出击
强连通再度出击
有向图中的两个顶点 和 被称为强连通的,当且仅当图中存在从 到 的路径,同时也存在从 到 的路径。
注意:若 与 强连通,且 与 强连通,则 与 也强连通。因此,图中的顶点会被划分为若干集合——强连通分量。属于同一个强连通分量的顶点两两之间强连通(包括自身),与分量外的任意顶点都不强连通。
在一节图论课上,Alice 在黑板上画了一张有 个顶点的有向图,并标出了它的强连通分量。课间时,Bob 想捉弄 Alice,他擦掉了图中部分边的方向。 Bob 希望:在擦掉部分边的方向之后,Alice 能够根据剩余边的方向以及原图的强连通分量划分,唯一地还原出所有被擦掉方向的边。
请你帮助 Bob 求出:他最多能擦掉多少条边的方向,以及有多少种选取最大边集的方案。
更形式化地说: 求出满足以下条件的边子集 的最大大小,以及这样的最大子集 的数量(对 取模):
- 将子集 中所有边的方向抹去;
- 仅依靠原图的强连通分量信息与不在 中的边的方向,就可以唯一地还原出 中每条边的方向,使得还原后的图强连通分量与原图完全一致。
输入格式
第一行包含三个整数 $(2 \le n \le 2000,\ 1 \le m \le 2000,\ 0 \le g \le 7)$ 分别表示顶点数、边数、测试点组别编号。
接下来 行,每行两个整数 表示第 条有向边为 。
保证:任意两点之间至多存在一条边(无论方向),即对任意 都满足 且 。
输出格式
第一行输出一个整数:最多可以抹去方向的边的数量。 第二行输出一个整数:满足最大数量的选取方案数,对 取模。
样例输入输出
标准输入
5 6 0
1 2
1 5
2 3
3 4
3 5
4 2
标准输出
3
3
样例说明
标记得出的强连通分量为:
可以抹去方向的边为虚线边。事实上:
- 边 不能反向,否则顶点 会处于同一个强连通分量;
- 边 与 也不能反向,否则顶点 不再属于同一个强连通分量。
考虑一种不合法的选取方式: 若同时抹去 和 的方向,则存在两种不同的定向方式,都能得到相同的强连通分量,因此不合法。
可以证明:恰好有 条边不能抹去方向,因此最多可抹去 条。
评分规则
测试点分为 组,只有通过某一组及所有前置要求的组别才能获得对应分数。
额外约束
| 组别 | 分数 | 限制 | 限制 | 前置组别 | 额外说明 |
|---|---|---|---|---|---|
| — | 样例 | ||||
| — | — | 所有边满足 ;对 存在边 | |||
| 所有边满足 | |||||
| — | 对 存在边 ,且存在边 | ||||
| 整张图是一个强连通分量 | |||||