• 洛谷 P4171 [JSOI2010] 满汉全席(2sat)


    传送门


    解题思路

    和板子几乎一样。

    而且不用输出方案。

    AC代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<map>
    #include<stack>
    #include<bitset>
    using namespace std;
    const int maxn=205;
    stack<int> s;
    int in[maxn],low[maxn],dfn[maxn],n,m,T,times,cnt,scc_cnt,p[maxn];
    struct node{
    	int v,next;
    }e[2005];
    void insert(int u,int v){
    	cnt++;
    	e[cnt].v=v;
    	e[cnt].next=p[u];
    	p[u]=cnt;
    }
    void dfs(int u){
    	dfn[u]=low[u]=++times;
    	s.push(u);
    	for(int i=p[u];i!=-1;i=e[i].next){
    		int v=e[i].v;
    		if(!dfn[v]){
    			dfs(v);
    			low[u]=min(low[u],low[v]);
    		}else{
    			if(!in[v]) low[u]=min(low[u],dfn[v]);
    		}
    	}
    	if(low[u]==dfn[u]){
    		scc_cnt++;
    		while(!s.empty()){
    			int x=s.top();s.pop();
    			in[x]=scc_cnt;
    			if(u==x) break;
    		}
    	}
    }
    int main(){
    	ios::sync_with_stdio(false);
    	cin>>T;
    	while(T--){
    		memset(p,-1,sizeof(p));
    		memset(dfn,0,sizeof(dfn));
    		memset(low,0,sizeof(low));
    		memset(in,0,sizeof(in));
    		times=cnt=scc_cnt=0;
    		cin>>n>>m;
    		for(int i=1;i<=m;i++){
    			char c1,c2;int x1,x2;
    			cin>>c1>>x1>>c2>>x2;
    			if(c1=='m'&&c2=='m') insert(x1+n,x2),insert(x2+n,x1);
    			if(c1=='m'&&c2=='h') insert(x1+n,x2+n),insert(x2,x1);
    			if(c1=='h'&&c2=='m') insert(x1,x2),insert(x2+n,x1+n);
    			if(c1=='h'&&c2=='h') insert(x1,x2+n),insert(x2,x1+n);
    		}
    		for(int i=1;i<=2*n;i++) if(!in[i]) dfs(i);
    		for(int i=1;i<=n;i++) {
    			if(in[i]==in[i+n]){
    				cout<<"BAD"<<endl;
    				break;
    			}
    			if(i==n){
    				cout<<"GOOD"<<endl;
    			}
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    知识体系总结
    计算机基础总结
    Redis总结
    Mysql总结
    JAVA基础总结
    有锁编程
    CAS
    读写自旋锁
    org.apache.log4j.Logger详解
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/15424643.html
Copyright © 2020-2023  润新知