標籤:-- min puts false include sizeof bzoj while get
題目傳送門:QWQ
分析
2-sat模板(然而辣雞如我還是調了好久)
代碼
//bzoj 1823 2-sat#include <bits/stdc++.h>using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} return x*f;}int get(){ int x; char c=getchar(); while(c!=‘m‘&&c!=‘h‘)c=getchar(); if(c==‘m‘)x=read()*2; else x=read()*2-1; return x;}struct Edge{ int from,to;};vector<int> G[20005];int low[4005], dfn[4005], sccno[4005], dfs_clock, scc_num;stack<int> s;void insert(int u,int v){ G[u].push_back(v);}void tarjan(int u){ dfn[u]=low[u]=++dfs_clock; s.push(u); for(int i=0;i<G[u].size();i++){ int v=G[u][i]; if(!dfn[v]){ tarjan(v); low[u]=min(low[u], low[v]); }else if(!sccno[v]){ low[u]=min(low[u], dfn[v]); } } if(low[u]==dfn[u]){ scc_num++; for(;;){ int x=s.top(); s.pop(); sccno[x]=scc_num; if(x==u) break; } }}int main(){ int n,m,T=read(); while(T--) { while(!s.empty()) s.pop(); n=read(); m=read(); int x,y,xp,yp; for(int i=0;i<m;i++) { x=get(); y=get(); if(x%2==0)xp=x--; else xp=x++; if(y%2==0)yp=y--; else yp=y++; insert(xp,y); insert(yp,x); } memset(dfn,0,sizeof(dfn)); memset(sccno,0,sizeof(sccno)); dfs_clock=scc_num=0; for(int i=1;i<=2*n;i++) if(!dfn[i]) tarjan(i); bool flag=1; for(int i=1;i<=n;i++) if(sccno[2*i]==sccno[2*i-1]) flag=false; if(flag) puts("GOOD"); else puts("BAD"); for(int i=0;i<=2*n;i++) G[i].clear(); } return 0;}
【BZOJ】1823: [JSOI2010]滿漢全席(2-sat)