zoukankan      html  css  js  c++  java
  • twoset模版

    twoset基本思想:有n个党派,每个党派有2个人,要求每个党派都要选出一个人,每个人之间可能存在互斥关系,判断最后能否选出这N个人来

    const int MAXN=20020;
    const int MAXM=100010;
    
    struct Edge
    {
        int to,next;
    }edge[MAXM];
    
    int head[MAXN],tot;
    
    void init()
    {
        tot=0;
        memset(head,-1,sizeof(head));
    }
    
    void addedge(int u,int v)
    {
        edge[tot].next=head[u];
        edge[tot].to=v;
        head[u]=tot++;
    }
    
    bool vis[MAXN];
    int S[MAXN],top;
    
    bool dfs(int u)
    {
        if(vis[u^1])
            return false;
        if(vis[u])
            return true;
        vis[u]=true;
        S[top++]=u;
        for(int i=head[u];i!=-1;i=edge[i].next)
        {
            if(!dfs(edge[i].to))
                return false;
        }
        return true;
    }
    
    bool Twosat(int n)//这里的n代表一共有n个人,(0,1),(2,3)(4,5)代表同一个党派
    {
        memset(vis,false,sizeof(vis));
        for(int i=0;i<n;i+=2)
        {
            if(vis[i]||vis[i^1])
                continue;
            top=0;
            if(!dfs(i))
            {
                while(top)
                    vis[S[--top]]=false;
                if(!dfs(i^1))
                    return false;
            }
        }
        return true;
    }
  • 相关阅读:
    webpack特点,安装,兼容性
    我们为什么需要构建工具
    vue-router keep-alive
    Es6模块化
    AMD-require.js
    CommonJs
    OJ
    算法
    flex属性 flex-grow、flex-shrink、flex-basic
    js过滤数组中的空值
  • 原文地址:https://www.cnblogs.com/wsruning/p/5749254.html
Copyright © 2011-2022 走看看