2-sat模版(转自acm再见)
来源:互联网 发布:ubuntu卸载wine软件 编辑:程序博客网 时间:2024/05/22 06:14
//2-sat模版const int maxn=10005*3;int n,m;int a[maxn],b[maxn];struct note{ int to; int nxt;}edge[maxn*2];int head[maxn];int ip;int dfn[maxn],low[maxn],sccno[maxn],cnt,scc,instack[maxn];stack<int> stk;void init(){ memset(head,-1,sizeof(head)); ip=1;}void addedge(int u,int v){ edge[ip].to=v,edge[ip].nxt=head[u],head[u]=ip++;}// x = xval or y = yval//void add_cluse(int x,int xval,int y,int yval)//{// x=x*2+xval;// y=y*2+yval;// addedge(x,y^1);// addedge(y,x^1);//}void dfs(int u){ dfn[u]=low[u]=++scc; stk.push(u); instack[u]=1; for (int i=head[u]; i!=-1; i=edge[i].nxt) { int v=edge[i].to; if (!dfn[v]) { dfs(v); low[u]=min(low[u],low[v]); } else if (instack[v]) low[u]=min(low[u],dfn[v]); } if (low[u]==dfn[u]) { cnt++; int x; do { x=stk.top(); stk.pop(); sccno[x]=cnt; instack[x]=0; }while (x!=u); }}bool solve(){ scc=cnt=0; memset(sccno,0,sizeof(sccno)); memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(instack,0,sizeof(instack)); while (!stk.empty()) stk.pop(); for (int i=0; i<2*n; i++) if (!dfn[i]) dfs(i); for (int i=0; i<2*n; i+=2) { if (sccno[i]==sccno[i^1]) return false; } return true;}
阅读全文
0 0
- 2-sat模版(转自acm再见)
- 2-sat模版
- 2-SAT模版
- ACM->2-sat
- ACM再见
- acm,再见
- 再见,viewDidUnload方法(转自@唐巧_boy 的博客。)
- acm在线模版(链接)
- ACM->2-sat ZOJ 3656 Bit Magic
- ACM,再见了
- 再见了acm
- 再见了,ACM
- 给ACM说再见
- 嗨,ACM,再见!
- 转(再见,谷歌)
- HDU3622 Bomb Game(2-SAT 问题,The 35th ACM/ICPC Asia Regional Tianjin ,Online)
- 再见,我的ACM生活
- LCA倍增模版-转自DS
- 解释颜色深度概念:8 bit、16 bit、32 bit的意思
- saltstack常用操作(五)-----状态文件.sls的编写
- yarn下的MR过程
- grep和find(五)
- 集群用法
- 2-sat模版(转自acm再见)
- [trick]dsu on tree
- 将本地项目上传至github
- maven项目字符集问题
- Java多线程设计模式之Immutable模式
- OAF客户化查询实现
- 滑动退出Activity
- 购买Vultr教程
- ccf 相邻数对