新手学习2-sat算法,看了一个多小时,才看懂。然后类比着打代码,结果出来和网上的一样。。。不过这一题可以作为有向图缩点的模板,同时也可以比较清晰的理解2-sat的内涵,所以在这里仍然贴出来。
View Code
1 #include2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 const int maxn=20001; 8 vector edge[maxn]; 9 int st[maxn]; 10 int dfn[maxn],low[maxn]; 11 int top,btype,tdfn; 12 int belong[maxn]; 13 bool ins[maxn]; 14 int bob,alice[maxn]; 15 void dfs(int s) 16 { 17 int t; 18 dfn[s]=low[s]=++tdfn; 19 ins[s]=1; 20 st[++top]=s; 21 for(int i=0;i