poj3648,2-sat求解

关键是题意的理解,英语,有时候明明每个字都认识,但是还是理解错误!哎!!悲剧啊!题意啊!
这是关键!开始误理解为n对新娘郞,非也!是只有一对,其他是夫妇,理解后就好做了,建立图
是关键,怎么转化关系,对到2sat问题上来,不妨设坐在新娘一排的是要“选择”的,那么对每组读入
,必需至少一个要选择,(柳暗花明啦?!)然后标号,2-SAT即可。
没有1A原因:

1:题意到关系一误:特殊情况:当新郞有奸情的时候,与他有奸情的必需选择了(新浪在对面),

当新娘有奸情时候没关系,不处理。

这样后A了。

哎,2-sat问题其实不难啊,这题输出一个解,按以前方法,秒杀之啊!关键还是题意的理解和问题的

转化以及数据的存贮。。。

#include  //16MS
#include
#include
#include
#include
using namespace std;
const int MAX=62;
int n,m;int times=0;
int low[MAX];int dfn[MAX];int visited[MAX];int isinstack[MAX];stacks;
int scc[MAX];int numblock=0;
int ans[MAX];
vector >edges(MAX);  //图
void clear()
{
    times=numblock=0;
    for(int i=0;i<2*n;i++)
    {
        ans[i]=visited[i]=dfn[i]=low[i]=isinstack[i];
        scc[i]=-1;
        edges[i].clear();
    }
}
void tarjan(int u)       //dfs
{
    dfn[u]=low[u]=++times;
    isinstack[u]=1;
    s.push(u); int len=edges[u].size();
    for(int i=0;ilow[v])low[u]=low[v];
           }
           else if(isinstack[v]&&dfn[v]


转载于:https://www.cnblogs.com/yezekun/p/3925810.html

你可能感兴趣的:(poj3648,2-sat求解)