一个点可能被判成割点多次。
所以不能发现一条出边满足要求就加入答案:
if (vt[v].low >= vt[u].dfn)
{
son_cnt++;
if (fa != 0 || son_cnt > 1)
ans.push_back(u);
}
而应该在搜索完所有出边后再加入:
bool flag = false;
if (vt[v].low >= vt[u].dfn)
{
son_cnt++;
flag = (fa != 0 || son_cnt > 1);
}
if (flag)
ans.push_back(u);