【bzoj1823】[JSOI2010]满汉全席 2-sat
来源:互联网 发布:电磁场与无线技术 知乎 编辑:程序博客网 时间:2024/04/27 15:32
学习一下2-sat
算法流程如下:
1、建图,图具有对称性(对于有限制的A,从A‘向A连边)
2、tarjan算法缩点
3、判断是否有解:若存在一组A和A'在同一个强连通分量中,则无解
4、缩点后,建反图
5、拓扑排序,若当前点A未标记,则选择A,对应的,标记A’;若当前点A标记了,则沿着边传递标记
本题是裸题
#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>#define maxn 20100using namespace std;int head[maxn],to[maxn],next[maxn];bool vis[maxn];int dfn[maxn],low[maxn],st[maxn],bel[maxn];int n,m,T,top,num,cnt,tot;char s1[5],s2[5];int cal(char *s){int x=0,n=strlen(s+1);for (int i=2;i<=n;i++) x=x*10+s[i]-'0';return x;}void addedge(int x,int y) {num++;to[num]=y;next[num]=head[x];head[x]=num;}void tarjan(int x){st[++top]=x;vis[x]=1;dfn[x]=low[x]=++tot;for (int p=head[x];p;p=next[p]) if (!dfn[to[p]]) tarjan(to[p]),low[x]=min(low[x],low[to[p]]); else if (vis[to[p]]) low[x]=min(low[x],dfn[to[p]]);if (dfn[x]==low[x]){cnt++;while (st[top+1]!=x){bel[st[top]]=cnt;vis[st[top]]=0;top--;}}}int main(){scanf("%d",&T);while (T--){num=top=tot=cnt=0;memset(st,0,sizeof(st));memset(head,0,sizeof(head));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));memset(vis,0,sizeof(vis));scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){scanf("%s%s",s1+1,s2+1);int op1=(s1[1]=='m'),x1=cal(s1),op2=(s2[1]=='m'),x2=cal(s2);addedge((!op1)*n+x1,op2*n+x2);addedge((!op2)*n+x2,op1*n+x1);}for (int i=1;i<=2*n;i++) if (!dfn[i]) tarjan(i);bool flag=1;for (int i=1;i<=n;i++) if (bel[i]==bel[i+n]) {flag=0;printf("BAD\n");break;}if (flag) printf("GOOD\n");}return 0;}
0 0
- [BZOJ1823][JSOI2010]满汉全席 && 2-sat
- 【bzoj1823】【jsoi2010】【满汉全席】【2-sat】
- Bzoj1823:[JSOI2010]满汉全席:2-sat
- 【bzoj1823】[JSOI2010]满汉全席 2-sat
- 【bzoj1823】[JSOI2010]满汉全席 2-SAT
- [bzoj1823][JSOI2010]满汉全席 2-sat
- bzoj1823[JSOI2010]满汉全席 2-SAT
- [2-SAT] [BZOJ1823] [JSOI2010]满汉全席
- BZOJ1823: [JSOI2010]满汉全席 2-sat
- bzoj1823 JSOI2010 满汉全席 2-SAT 经典建模
- bzoj1823 [JSOI2010]满汉全席(2-SAT)
- [BZOJ1823][JSOI2010]满汉全席(2-SAT)
- [BZOJ1823][JSOI2010]满汉全席(2-SAT)
- bzoj1823: [JSOI2010]满汉全席
- BZOJ1823: [JSOI2010]满汉全席
- BZOJ1823 [JSOI2010]满汉全席
- 1823: [JSOI2010]满汉全席 2-SAT
- bzoj 1823: [JSOI2010]满汉全席 2-SAT判定
- inline-block-inline-block的简单区别
- UVA624 - CD (DFS)
- Ubuntu14.04如何安装32位兼容库,即ia32-libs
- Android手机应用接口大全
- HDU 4778 Gems Fight!【博弈+DP】
- 【bzoj1823】[JSOI2010]满汉全席 2-sat
- python 调用数据库
- 算法 把二叉查找树转变成排序的双向链表
- HYSBZ 2243 树链剖分
- 中山培训 2016.7.9
- linux中断分层技术分析
- shell学习笔记
- 向文件中添加行
- lua脚本对utf8字符串过滤中文字符