HDU 1814 Peaceful Commission(2-SAT:最小字典序)
http://acm.hdu.edu.cn/showproblem.php?pid=1814
题意:现在有n个党派,每个党派有2个代表,我们需要从每个党派中选一个代表出来,构成一个n个人的立法委员会.但是可能有一些代表互相讨厌,所以他们不能同时出现在立法委员会中.现在问你是否存在一个合理的方案,且输出所有可能立法委员会的最小字典序结果.
分析:
要输出最小字典序的2-SAT问题,用刘汝佳 训练指南上的方法是最简单的. 这里我们把每个党派看出一个点,从0到n-1. 如果对于a(a从0到2*n-1)代表与b代表不和,那么G[a].push_back(b^1) 且 G[b].push_back(a^1).
AC代码:
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn= 8000+10;
struct TwoSAT
{
int n;
vector<int> G[maxn*2];
int S[maxn*2], c;
bool mark[maxn*2];
bool dfs(int x)
{
if(mark[x^1]) return false;
if(mark[x]) return true;
mark[x]= true;
S[c++]=x;
for(int i=0;i<G[x].size();i++)
if(!dfs(G[x][i])) return false;
return true;
}
void init(int n)
{
this->n=n;
for(int i=0;i<2*n;i++) G[i].clear();
memset(mark,0,sizeof(mark));
}
void add_clause(int x,int y)//注意这里的修改
{
G[x].push_back(y^1);
G[y].push_back(x^1);
}
bool solve()
{
for(int i=0;i<2*n;i+=2)
if(!mark[i] && !mark[i+1])
{
c=0;
if(!dfs(i))
{
while(c>0) mark[S[--c]]=false;
if(!dfs(i+1)) return false;
}
}
return true;
}
void print()
{
if(!solve()) printf("NIE\n");
else
{
for(int i=0;i<2*n;i++)if(mark[i])
printf("%d\n",i+1);
}
}
}TS;
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)==2)
{
TS.init(n);
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
a--, b--;
TS.add_clause(a,b);
}
TS.print();
}
return 0;
}
分享到:
相关推荐
2-sat---hdu3062,代码详尽,清晰,格式规范,亲测无误。
可拆卸核心板滤波电容电源指示灯排针复位F103--R10不焊F207--R9不焊第19引脚F103--C4焊0欧姆,C3不焊Tuesday, August 31
排母,核心板接口ADC 电位器扩展接口,预留模拟量Tuesday, August 31, 2021Tuesday, August 31, 2021Tuesday
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
第一章 功能简介本章介绍HDU-EID-V2开发板的功能,使大家对该开发板的功能及特点有个基本了解。1. 处理器( MCU)HDU-EID-V2 开发板的处理器
2012-06-11 16:03 0 1.txt 2012-06-11 15:20 42,528 c#仿QQ好友界面.rar 2012-06-11 15:22 216,281 ChineseChessV1.rar ...2012-06-11 15:38 299,008 (HDUACM2010版_06)并查集(最小生成树).ppt
guess-the-number-python:用Python猜数字
git clone https://github.com/fei-hdu/ca-gan cd ca-gan 从安装PyTorch 0.4+和torchvision以及其他依赖项(例如visdom和dominate)。 您可以通过以下方式安装所有依赖项 pip install -r requirments.txt ca-gan...
很适合ACM初学者的文档, 题目,代码,解体思路一应俱全
hdu-api 是一个集结 HDU 所有教务管理服务的 SDK,提供了一卡通服务、考试、课表、选课和一些公共信息如空闲教室、上课时间等信息的 API。 hdu-api 主要基于 Requests 库和 Beautiful Soup 库写成。 特性 支持一卡通...
基础算法类 ACM 入门 杭电OJ 11页题目题解,算法入门的时候刷题可以参考 搜集整理起来了比单个去搜题解方便快捷
hdu os lesson=============linux kernel 4.13.11
判断某整数是否为2的整数次幂 问题转化为:判断整数是否为正整数且二进制中仅存在一位1 (n > 0 && (n & (n - 1)) == 0) 链表节点交换 修改next指针的值进行节点的交换 修改val字段的值 等价节点交换 练习: leetcode...
1、开发板外观说明 2、电源供电 3、连接调试方法 4、复用功能选择说明
项目简介:本项目意为向所有杭电学子提供各种信息,学习资料以及生活经验等。薪火相传,只为更好的杭电。总体结构:学习高等数学工程制图计算机图形学计算机系统结构计算机组成原理计算机网络考研离散数学马原密码学...
文件系统 杭电操作系统文件管理系统
主要有浙江工业大学的OJ,HDU,POJ,Codeforces,UVA,ZJU,Leetcode上面一些题目的具体实现和算法分析。 涉及搜索,动态规划,数学,图论,计算几何,数据结构等。 总结的经典算法的模板 智力题 联系作者 E-mail: acm_...
ACM HDU 2000->2099 解题报告 ACM HDU 2000->2099 解题报告 ACM HDU 2000->2099 解题报告
e2e:E2E测试 后端:后端,单一服务 验证码服务:提供验证码支持的微服务 ohunt:一种有状态的独立爬网程序微服务,用于支持某些OJ(例如ZOJ)。 build:用于构建和部署项目的代码。 工具链:docker,docker-...
通灵扑克玩家解决方法: :