您的位置:首页 > 其它

模板:强连通分量&2-sat

2016-07-01 20:24 197 查看
void Tarjan(int x){
low[x]=ID[x]=++tot;
st[++top]=x;Inst[x]=true;
for(int i=fir[x];i;i=nxt[i])
if(!ID[to[i]]){
Tarjan(to[i]);
low[x]=min(low[x],low[to[i]]);
}
else if(Inst[to[i]])
low[x]=min(low[x],ID[to[i]]);
if(low[x]==ID[x]){
++scnt;
while(true){
int y=st[top--];
scc[y]=scnt;
Inst[y]=false;
if(x==y)break;
}
}
}

bool Check(){
for(int i=0;i<n*2;i++)
if(!ID[i])Tarjan(i);
for(int i=0;i<n;i++)
if(scc[i*2]==scc[i*2+1])
return false;
return true;
}

http://blog.csdn.net/qq_24451605/article/details/47126143
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: