| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
反正蒟蒻考虑重边偶然过了付DFS代码(不考虑重边版本参见LRJ黑书),用静态邻接表写的 p 和 p xor 1 是同一条边只是方向不同
由于有重边
所以判断回父亲边的时候不能用边终点是否是父亲来判断,而是直接判断边.
procedure dfs(u,p,d:longint);
var t1,cnt:longint;
begin
v[u]:=true; cnt:=0; dep[u]:=d; low[u]:=d;
t1:=g[u]; while t1<>0 do begin
if not v[mem[t1].n] then begin
dfs(mem[t1].n,t1,d+1); inc(cnt);
low[u]:=min(low[u],low[mem[t1].n]);
end else if (t1<>p)and(t1<>p xor 1) then low[u]:=min(low[u],dep[mem[t1].n]);
//if ((u=root)and(cnt>1))or((u<>root)and(low[mem[t1].n]>=dep[u])) then cut[u]:=true;
if (low[mem[t1].n]>dep[u]) then begin mem[t1].b:=true; mem[t1 xor 1].b:=true; end;
t1:=mem[t1].next;
end;
end;
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator