上周因老师不在停课一次
今天来了几个新同学,导致老师讲得比较认真。。
记了这么些笔记
图的DFS
桥割点 双连通分量 强连通分量
树上所有边都是桥
环上都不是桥
不在环中都是桥
枚举环巨慢
枚举边太慢
树边一定n – 1条和反向边 (剩下的点)
桥只可能是树边,推出一个图最多n – 1个桥
定义low函数 ,u及u的子孙,通过一条回边,能回到的最小祖先的序号
桥的条件 v是u的祖先 low[u] == d[v]
Dfs(u, p)
T++;d[u] = t; low[u] = d[u];
E =first[u];
Whilee != 0 do begin
V = tail[e]
If d[v] = 0begin
Dfs(v, u);
Low[u] = min(low[u], low[v])
End;
Else if p != vthen low[u] = min(low[u], d[v])
end;
if …
end;
双连通分量和题目略去不讲
强连通分量缩点
前向边和交叉边居然可以忽略。。
Dfs(u(
T++;d[u] = t; low[u] = t;
E =find(u);
Whilee != 0 do begin
V = tail[u];
If d[v] == 0then begin
Dfs(v);
Low[u] = min(low[u], low[v]);
End;
If (d[v]<d[u]) and (scc[v] == 0) low[u] = min(low[u], d[v]);
E = next[e];
End;
End.
讲了道T77
我:把无向图看成有向图,然后缩点,找入度为0和出度为0的点求最大值
马融:这样图就被你缩成一点了
我:。。。
还好yzq大神也犯了这个错误(明显受到了lrj的书里一道等价性证明的题目影响)
正解是找双连通分量缩点,缩图后度为1的点除以2取上整
似乎还讲错了,找的是边-双连通分量而非点-双连通分量
2-SAT
方案的输出比较神 !a - a 有边 a = T a - !a 有边 a = F 都没边就随便选