P4171 [JSOI2010] 满汉全席(2-sat)
2021/8/8 23:35:57
本文主要是介绍P4171 [JSOI2010] 满汉全席(2-sat),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Aimee
2-sat的模板题
显然根据题目所给内容,我们可以根据每一个菜的做法,推断出另一个菜的做法,然后连边
这样会出现一个个的环,这个环不能有矛盾
也就是满式和汉式不能同时被推出
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stack> #define int long long using namespace std; int low[500005]; int dfn[500005]; int be[500005]; int sp,p; int ti; int head[5000005]; struct e{ int to; int ne; }ed[5000005]; string s1,s2; int k; int n,m; stack<int> s; void add(int f,int to){ p++; ed[p].ne=head[f]; head[f]=p; ed[p].to=to; return ; } void tarjan(int r){ low[r]=dfn[r]=++ti; s.push(r); for(int i=head[r];i;i=ed[i].ne){ int v=ed[i].to; if(!dfn[v]){ tarjan(v); low[r]=min(low[r],low[v]); }else{ if(!be[v]){ low[r]=min(low[r],dfn[v]); } } } if(low[r]==dfn[r]){ sp++; while(s.top()!=r){ int x=s.top(); s.pop(); be[x]=sp; } s.pop(); be[r]=sp; } } void ini(){ p=0; sp=0; ti=0; memset(head,0,sizeof(head)); memset(be,0,sizeof(be)); memset(dfn,0,sizeof(dfn)); } signed main(){ scanf("%d",&k); while(k--){ ini(); scanf("%d%d",&n,&m); for(int i=1;i<=m;++i){ cin>>s1>>s2; int x=0; int y=0; for(int i=1;i<s1.length();++i){ x=x*10+s1[i]-'0'; } for(int i=1;i<s2.length();++i){ y=y*10+s2[i]-'0'; } if(s1[0]=='m'){ if(s2[0]=='m'){ add(x+n,y); add(y+n,x); }else{ add(x+n,y+n); add(y,x); } } if(s1[0]=='h'){ if(s2[0]=='h'){ add(x,y+n); add(y,x+n); }else{ add(x,y); add(y+n,x+n); } } } for(int i=1;i<=n;++i) if(!dfn[i]) tarjan(i); int f=1; for(int i=1;i<=n;++i){ if(be[i]==be[i+n]){ f=0; break; } } if(f==0){ printf("BAD\n"); }else{ printf("GOOD\n"); } } return 0; }
这篇关于P4171 [JSOI2010] 满汉全席(2-sat)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21Vue3教程:新手入门到实践应用
- 2024-12-21VueRouter4教程:从入门到实践
- 2024-12-20Vue3项目实战:从入门到上手
- 2024-12-20Vue3项目实战:新手入门教程
- 2024-12-20VueRouter4项目实战:新手入门教程
- 2024-12-20如何实现JDBC和jsp的关系?-icode9专业技术文章分享
- 2024-12-20Vue项目中实现TagsView标签栏导航的简单教程
- 2024-12-20Vue3入门教程:从零开始搭建你的第一个Vue3项目
- 2024-12-20从零开始学习vueRouter4:基础教程
- 2024-12-20Vuex4课程:新手入门到上手实战全攻略