您的位置:首页 > 其它

【模板】无向图的割顶

2015-03-20 23:40 190 查看
无向图的割顶:

Vector <int> G[] :邻接表存图

Int pre[] :存储时间戳

Int low[] : u及其后代所能连回的最早的祖先的pre值

Int iscut[] : =true表示是割顶,=false不是割顶

Dfs函数在主函数调用时,fa预设为-1。

注意初始化:

memset(head,-1,sizeof(head));
edge=0;
dfs_clock=0;
memset(low,0,sizeof(low));
memset(pre,0,sizeof(pre));


以下是模板

vector <int> G[MAXN];
int pre[MAXN],iscut[MAXN],low[MAXN],dfs_clock;
int dfs(int u,int fa)
{
int lowu=pre[u]=++dfs_clock;
int child=0;
for (int i=0;i<G[u].size();i++)
{
int v=G[u][i];
if (!pre[v])
{
child++;
int lowv=dfs(v,u);
lowu=min(lowu,lowv);
if (lowv>=pre[u])//如果求桥,去掉等于号
{
iscut[u]=true;
}
}else
if (pre[v]<pre[u] && v!=fa)
{
lowu=min(lowu,pre[v]);
}
}
if (fa<0 && child==1) iscut[u]=0;
return low[u]=lowu;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: