给出了一个 N 个点和 M 条边的有向图。顶点编号为 1∼N 。图中没有重边和自环。
对于这 M 条边,求如果仅反转这一条边,是否会对整个图的强连通分量的数量产生影响?
在这里,反转边 i 的意思是一条点 a 向 b 的边,替换为从点 b 向 a 的边。
数据范围
对于 24% 的数据:2≤N≤20,1≤M≤100
对于 100% 的数据:2≤N≤1000,1≤M≤200,000,1≤ai,bi≤N
考虑(u, v)∈G,
若(u, v)非u->v必经边, v不能到u, 则翻转后强连通分量的数量+=1.
若(u, v)非u->v必经边, v能到u, 则翻转后强连通分量的数量不变.
若(u, v)是u->v必经边, v不能到u, 则翻转后强连通分量的数量不变.
若(u, v)是u->v必经边, v能到u, 则翻转后强连通分量的数量-=1.
瓶颈在于判断两个验证条件:
1.是否存在u到v的路径, 2.当前边是否为必经的边.
代码如下:
#include <bits/stdc++.h>
using namespace std;
inline int read() {
int x = 0, f = 0; char ch = getchar();
while (!isdigit(ch)) f = ch == '-', ch = getchar();
while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch = getchar