UVALive3713_Astronauts
有n个宇航员,根据年龄限制,所有宇航员只能从事A或B中的一种任务,所有人都可以从事C的任务。有的宇航员之间相互讨厌,不能分在一组,求出一种满足条件的分配方案。
2sat。mark[]中i+i和i+i+1分别表示i从事C工作或者他的特有工作。
对于仇恨关系,我们可以知道U和V两个人不能同时从事C工作。于是加边 (U+U,V+V+1),(V+V,U+U+1)。
同时,如果这两个人的特有工作相同,那么还需要加边(U+U+1,V+V),(V+V+1,U+U)。
召唤代码君:
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 5555550
using namespace std; int age[maxn],n,m;
int next[maxn],to[maxn],first[maxn],edge;
bool mark[maxn];//0 C \ 1 A|B
int Q[maxn],top;
double avg; void addedge(int U,int V)
{
edge++;
to[edge]=V,next[edge]=first[U],first[U]=edge;
} bool dfs(int cur)
{
if (mark[cur^]) return false;
if (mark[cur]) return true;
Q[++top]=cur,mark[cur]=true;
for (int i=first[cur]; i!=-; i=next[i])
if (!dfs(to[i])) return false;
return true;
} int main()
{
int U,V;
while (scanf("%d%d",&n,&m) && (n|m))
{
avg=,edge=-;
for (int i=; i<=n; i++)
{
scanf("%d",&age[i]);
avg+=age[i];
mark[i+i]=mark[i+i+]=false;
first[i+i]=first[i+i+]=-;
}
avg/=n;
while (m--)
{
scanf("%d%d",&U,&V);
addedge(U+U,V+V+),addedge(V+V,U+U+);
if ((age[U]<avg)^(age[V]<avg)) continue;
addedge(U+U+,V+V),addedge(V+V+,U+U);
}
bool flag=true;
for (int i=; i<=n; i++)
{
if (mark[i+i] || mark[i+i+]) continue;
top=;
if (!dfs(i+i))
{
while (top) mark[Q[top--]]=false;
if (!dfs(i+i+))
{
flag=false;
break;
}
}
}
if (flag)
{
for (int i=; i<=n; i++)
if (mark[i+i]) printf("C\n");
else printf("%c\n",age[i]>=avg?'A':'B');
}
else puts("No solution.");
}
return ;
}
UVALive3713_Astronauts的更多相关文章
随机推荐
- File System Object(FSO对象)A
FSO对象模型包含在Scripting 类型库 (Scrrun.Dll)中,它同时包含了Drive.Folder.File.FileSystemObject和TextStream五个对象: 1.Dri ...
- Jenkins管理插件(备份插件)
Jenkins管理插件 为了让所有的插件在 Jenkins 内可用,所有插件的列表可以访问链接 − https://wiki.jenkins-ci.org/display/JENKINS/Plugin ...
- NO--11关于"this"你知道多少
为了更好地理解 this,将 this 使用的场景分成三类: 在函数内部 this 一个额外的,通常是隐含的参数. 在函数外部(顶级作用域中): 这指的是浏览器中的全局对象或者 Node.js 中一个 ...
- SICP读书笔记 2.1
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- Java那些事-泛型通配符
Java的类型通配符,可以出现在类.方法上面.最常用的方式就是集合类,例如List,Set等类上面. 通配符类型 有泛型参数 List 有无类型标识 List< ? > 有通用的标识 Li ...
- HackRF 升级固件到新版本
本文内容.开发板及配件仅限用于学校或科研院所开展科研实验! 淘宝店铺名称:开源SDR实验室 HackRF链接:https://item.taobao.com/item.htm?spm=a1z10.1- ...
- tensorflow-gpu与CUDA、CUDNN的版本问题
折腾了将近两天的时间,终于搞好了,感觉把所有的坑都踩过了一遍.....泪牛满面 1.先安装CUDA,并安装,尽量不要下载最新版本的,坑,本机可以下载最新本10.0版本,但与CUDNN和tensorfl ...
- [奇葩问题] ERROR 2013 (HY000): Lost connection to MySQL server during query
查询一条耗时30s以上语句,实际为2分钟多. mysql> select version(); +------------+ | version() | +------------+ | 5.6 ...
- javaweb 安全传输签名机制
java web传输中的安全签名说明: 对请求中的数据 Key对进行签名,最终生成一个签名字符串,标记为sign:"djflw8wejwl9w0ejwlush8fw9ew9",位数 ...
- MyForm_参考django的Form组建
fork wupeiqi:https://github.com/fat39/Tyrion 组件说明:https://www.cnblogs.com/wupeiqi/p/5938916.html