bushi
之前写了这道题
现在写P8867 [NOIP2022] 建造军营 时候从这里搬了 Tarjan 模板:
int dfn[N],low[N],dfncnt;
//dfn dfs序
//low 在树边与返祖边方向上能走到的dfn最小的节点
void tarjan(int now,int father)
{
dfn[now]=low[now]=++dfncnt;
int child=0;
for(int i=head[now];i;i=e[i].nxt)
{
int to=e[i].to;
if(!dfn[to])//如果当前边为树边
{
/*>>>>>>*/tarjan(to,father),low[now]=min(low[now],low[to]);
if(low[to]>=dfn[now]&&now!=father) cut_node[now]=true;
//如果儿子的low值大于等于dfn,则代表其为儿子与其他非子树点相连的唯一途径
if(now==father) child++;
}
else//当前边为返祖边
low[now]=min(low[now],dfn[to]);
}
if(child>=2&&now==father) cut_node[now]=true;//对根的处理
}
我这里竟然写了:
tarjan(to,now),low[now]=min(low[now],low[to]);
而且离奇的是这样写竟然 AC 了???
搞得我建造军营写了1h都找不到错
请问这两种写法难道不是明显不等价吗?
还是单纯数据过水?