码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-07-01 21:31:29      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

 1 void Tarjan(int x){
 2     low[x]=ID[x]=++tot;
 3     st[++top]=x;Inst[x]=true;
 4     for(int i=fir[x];i;i=nxt[i])
 5         if(!ID[to[i]]){
 6             Tarjan(to[i]);
 7             low[x]=min(low[x],low[to[i]]);
 8         }
 9         else if(Inst[to[i]])
10             low[x]=min(low[x],ID[to[i]]);
11     if(low[x]==ID[x]){
12         ++scnt;
13         while(true){
14             int y=st[top--];
15             scc[y]=scnt;
16             Inst[y]=false;
17             if(x==y)break;
18         }        
19     }
20 }
21 
22 bool Check(){
23     for(int i=0;i<n*2;i++)
24         if(!ID[i])Tarjan(i);
25     for(int i=0;i<n;i++)
26         if(scc[i*2]==scc[i*2+1])
27             return false;
28     return true;            
29 }

 http://blog.csdn.net/qq_24451605/article/details/47126143

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

标签:

原文地址:http://www.cnblogs.com/TenderRun/p/5634186.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!