zoukankan      html  css  js  c++  java
  • hiho一下第134周 1468 : 2-SAT·hihoCoder新春晚会

    1468 : 2-SAT·hihoCoder新春晚会

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    hihoCoder新春晚会正在紧张地筹备中。晚会分为上半场和下半场,总导演小Hi现在要为N个节目安排演出时间(上半场或下半场)。为了描述方便,我们将第i个节目对应两个编号2i-1和2i,分别表示把第i个节目安排在上半场和下半场。

    由于演员、道具和布景的限制。有些安排之间存在冲突,比如编号1的安排和编号4的安排有冲突,意味着"把第1个节目安排在上半场"同"把第2个节目安排在下半场"有冲突。

    现在小Hi手里有M对编号,表示冲突的节目安排。他的任务是帮助主办方安排出节目演出的合理时间。

    解题方法提示

    输入

    第一行包含两个非负整数n和m(n≤8000,m≤20000),代表有n个节目和m对冲突。

    接下来m行每行两个数x和y,表示编号x和编号y冲突。

    输出

    输出n行,每行一个数,从小到大输出最后进行演出的编号。若有多解,则输出字典序最小的。无解则输出NIE。

    样例输入
    3 2
    1 3
    2 4
    样例输出
    1
    4
    5
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <time.h>
    #include <string>
    #include <map>
    #include <stack>
    #include <vector>
    #include <set>
    #include <queue>
    #define met(a,b) memset(a,b,sizeof a)
    #define pb push_back
    #define lson(x) ((x<<1))
    #define rson(x) ((x<<1)+1)
    using namespace std;
    typedef long long ll;
    const int N=2e4+5;
    const int M=4e5+10;
    struct Edge {
        int to,next;
    } edge[M];
    int head[M],tot;
    void init() {
        tot = 0;
        memset(head,-1,sizeof(head));
    }
    void addedge(int u,int v) {
        edge[tot].to = v;
        edge[tot].next = head[u];
        head[u] = tot++;
    }
    bool vis[N];//染色标记,为true表示选择
    int S[N],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) {
        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;
    }
    int main() {
        int n,m;
        int u,v;
        scanf("%d%d",&n,&m);
        init();
        while(m--) {
            scanf("%d%d",&u,&v);
            u--;
            v--;
            addedge(u,v^1);
            addedge(v,u^1);
        }
        if(Twosat(2*n)) {
            for(int i = 0; i < 2*n; i++)
                if(vis[i])
                    printf("%d
    ",i+1);
        } else printf("NIE
    ");
        return 0;
    }
  • 相关阅读:
    git速度慢解决方式
    idea破解
    高并发redis分布式锁
    一个简单的struts2项目
    一个简单的java项目使用hibernate连接mysql数据库
    hibernate连接数据库中文乱码
    删除文件时出现找不到该项目 请确认该项目位置
    redis错误解决
    pyQT4和pyQT5的主要模块介绍
    python之type函数
  • 原文地址:https://www.cnblogs.com/jianrenfang/p/6416883.html
Copyright © 2011-2022 走看看