int low[MAX],dep[MAX],mark[MAX],cutpoint[MAX];
void dfs(int s,int father,int depth)
{
int u,v,tot=0;
mark[s]=1;
low[s]=dep[s]=depth;
for(int i=0;i<mp[s].size();i++)
{
v=mp[s][i];
if(mark[v]==1&&v!=father&&dep[v]<low[s])
low[s]=dep[v];
else if(mark[v]==0)
{
tot++;
dfs(v,s,depth+1)
if(low[v]<low[s])
low[s]=low[v];
if((s==root&&tot>1)||(s!=root&&low[v]>=dep[s]))
cutpoint[s]=1;
if(low[v]>dep[s])
//标记边(s,v)为割边
}
}
mark[s]=2;
}
我tm说忘了链接,我都不信....
求割边和割点
最新推荐文章于 2022-03-29 18:36:01 发布