LUOGU P4171 [JSOI2010]满汉全席
解题思路
2-SAT 裸题。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int MAXN = 1005;
inline int rd(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?-1:1;ch=getchar();}
while(isdigit(ch)) {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
return x*f;
}
int n,m,T,head[MAXN],cnt,col_num,num;
int to[MAXN<<1],nxt[MAXN<<1],bl[MAXN];
int stk[MAXN],top,low[MAXN],dfn[MAXN];
bool vis[MAXN];
inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
}
void tarjan(int x){
low[x]=dfn[x]=++num;vis[x]=1;stk[++top]=x;
for(register int i=head[x];i;i=nxt[i]){
int u=to[i];
if(!dfn[u]) {
tarjan(u);
low[x]=min(low[x],low[u]);
}
else if(vis[u]) low[x]=min(low[x],dfn[u]);
}
if(low[x]==dfn[x]){
vis[x]=0;bl[x]=++col_num;
while(stk[top]!=x){
vis[stk[top]]=0;
bl[stk[top--]]=col_num;
}top--;
}
}
int main(){
T=rd();char c1[10],c2[10];
while(T--){
memset(head,0,sizeof(head));
memset(bl,0,sizeof(bl));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
memset(nxt,0,sizeof(nxt));
memset(to,0,sizeof(to));
top=num=col_num=cnt=0;
n=rd();m=rd();bool flag=false;
for(register int i=1;i<=m;i++){
scanf("%s%s",c1+1,c2+1);
int sx=0,sy=0,tx=0,ty=0,x=0,y=0,t1=2,t2=2;
if(c1[1]=='m') sx=1;if(c2[1]=='m') sy=1;
tx=sx^1,ty=sy^1;
while(isdigit(c1[t1])) x=(x<<1)+(x<<3)+c1[t1++]-'0';
while(isdigit(c2[t2])) y=(y<<1)+(y<<3)+c2[t2++]-'0';
// cout<<x<<" "<<y<<endl;
add(x<<1|tx,y<<1|sy);add(y<<1|ty,x<<1|sx);
}
for(register int i=2;i<=(n<<1|1);i++) if(!dfn[i]) tarjan(i);
for(register int i=1;i<=n;i++)
if(bl[i<<1]==bl[i<<1|1]) {
puts("BAD");flag=1;
break;
}
if(!flag) puts("GOOD");
}
return 0;
}
LUOGU P4171 [JSOI2010]满汉全席的更多相关文章
- Luogu P4171 [JSOI2010]满汉全席 2-sat
终于搞懂了\(2-sat\).实际上是个挺简单的东西,像网络流一样关键在于建模. 问题:\(n\)个数\(A\),可以选择\(0\)和\(1\),现在给你\(m\)组条件\(A\),\(B\),对每个 ...
- 洛谷 P4171 [JSOI2010]满汉全席 解题报告
P4171 [JSOI2010]满汉全席 题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高 ...
- 洛谷P4171 [JSOI2010] 满汉全席 [2-SAT,Tarjan]
题目传送门 满汉全席 题目描述 满汉全席是中国最丰盛的宴客菜肴,有许多种不同的材料透过满族或是汉族的料理方式,呈现在數量繁多的菜色之中.由于菜色众多而繁杂,只有极少數博学多闻技艺高超的厨师能够做出满汉 ...
- P4171 [JSOI2010]满汉全席
简要的学了一下2-sat,然而不会输出方案. 就是个sb模板题啦 // luogu-judger-enable-o2 #include<bits/stdc++.h> #define il ...
- [洛谷P4171][JSOI2010]满汉全席
题目大意:有$n$个点,每个点可以选或不选,有$m$组约束,形如$a,u,b,v$,表示$u=a,v=b$中至少要满足一个条件,问是否存在一组解,多组询问 题解:$2-SAT$,感觉是板子题呀,最后判 ...
- P4171 [JSOI2010]满汉全席(2-SAT)
传送门 2-SAT裸题 把每一道菜拆成两个点分别表示用汉式或满式 连边可以参考板子->这里 然后最尴尬的是我没发现$n<=100$然后化成整数的时候只考虑了$s[1]$结果炸掉了2333 ...
- bzoj1823 [JSOI2010]满汉全席(2-SAT)
1823: [JSOI2010]满汉全席 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1246 Solved: 598[Submit][Status ...
- BZOJ 1823: [JSOI2010]满汉全席( 2-sat )
2-sat...假如一个评委喜好的2样中..其中一样没做, 那另一样就一定要做, 这样去建图..然后跑tarjan. 时间复杂度O((n+m)*K) ------------------------- ...
- BZOJ_1823_[JSOI2010]满汉全席_2-sat+tarjan
BZOJ_1823_[JSOI2010]满汉全席_2-sat 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1823 分析:一道比较容易看出来的 ...
随机推荐
- open 和 release
我们开始在真实的 scull 函数中使用它们. open 方法 open 方法提供给驱动来做任何的初始化来准备后续的操作. 在大部分驱动中, open 应当 进行下面的工作: 检查设备特定的错误( ...
- Python基础知识之2——字典
字典是什么? 字典是另外一个可变的数据结构,且可存储任意类型对象,比如字符串.数字.列表等.字典是由关键字和值两部分组成,也就是 key 和 value,中间用冒号分隔.这种结构类似于新华字典,字典中 ...
- opencv编译:opencv 3.4.1 编译 contrib模块,增加人脸识别
start cmake-gui select the opencv source code folder and the folder where binaries will be built (th ...
- rem适配手机
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- [转]Git 常用命令详解
史上最浅显易懂的Git教程 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/ ht ...
- MFC 使程序不在任务栏显示
在OnInitDialog()中直接修改窗口风格: // 让本程序不在任务栏显示(创建一个工具条窗口) ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);
- MSI右键添加管理员运行.reg
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Msi.Package\shell\runas]@="右键以管理员运行MSI& ...
- HTTP各版本的区别
什么是HTTP和HTTPS? HTTP是浏览器与服务器之间以明文的方式传送内容的一种互联网通信协议. HTTPS是在HTTP的基础上主要基于SPDF协议结合SSL/TLS加密协议,客户端依靠证书验证服 ...
- Windows中的Tree命令
Windows中的Tree命令你会用吗? - 步行者的专栏 - CSDN博客 https://blog.csdn.net/hantiannan/article/details/7663893 (ven ...
- webservice技术--服务器端
1.webservice实现单点登录具体逻辑为 ①软通web端作为客户端,请求wi社区后台,进行登录请求 ②wi社区后台验证t,核实无误后,走登录逻辑,直接进入欢迎页 ③如果有错误,封装错误xml,返 ...