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+;
const int M=4e5+;
struct Edge {
int to,next;
} edge[M];
int head[M],tot;
void init() {
tot = ;
memset(head,-,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^])return false;
if(vis[u])return true;
vis[u] = true;
S[top++] = u;
for(int i = head[u]; i != -; 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 = ; i < n; i += ) {
if(vis[i] || vis[i^])continue;
top = ;
if(!dfs(i)) {
while(top)vis[S[--top]] = false;
if(!dfs(i^)) 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^);
addedge(v,u^);
}
if(Twosat(*n)) {
for(int i = ; i < *n; i++)
if(vis[i])
printf("%d\n",i+);
} else printf("NIE\n");
return ;
}

最新文章

  1. Java各种数据结构实现
  2. Python爬虫学习(1): urllib的使用
  3. 编写高质量ios-之一 OC 语言的起源
  4. event.stopPropagation()与event.preventDefault()
  5. MSDeploy
  6. 验证xml是否有效于.dtd文件
  7. scala言语基础学习三(面向对象编程)
  8. [译]MongoDB 3.0发布说明
  9. Java类的初始化过程及清理
  10. 【HDOJ】2757 Ocean Currents
  11. iOS友盟三方登陆
  12. Java框架spring 学习笔记(十一):aop相关概念
  13. 论文阅读笔记二十二:End-to-End Instance Segmentation with Recurrent Attention(CVPR2017)
  14. pandas数组获取最大值索引的方法-argmax和idxmax
  15. Myeclipse10使用git
  16. redis -clock_gettime问题
  17. 基于 Laravel 开发博客应用系列 —— 从测试开始(二):使用Gulp实现自动化测试
  18. RPM命令详解(安装、升级、卸载)
  19. 174.Dungeon Game---dp
  20. git学习——&lt;四&gt;git版本管理

热门文章

  1. BZOJ4008 [HNOI2015]亚瑟王 【概率dp】
  2. 什么是node.js的事件驱动编程
  3. 解决在ios下不能自动播放音频的问题
  4. 转载:Java中的String与常量池
  5. centos yum 安装 mysql
  6. vivo面试经验4(linux基本操作,最基本,必须得会!!)
  7. bzoj4756 [Usaco2017 Jan]Promotion Counting
  8. shell脚本之正则表达和文本处理(文本处理三剑客:1、grep 2、sed 3、awk)
  9. IEEE 802.15介绍
  10. [转]Native进程的运行过程