有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的更多相关文章

随机推荐

  1. SSIS 容器

    容器(Container)是控制流的特殊的任务(Task),它为一个或多个Task提供逻辑组合,可以实现工作流的重复执行和顺序执行,还可以把变量和事件处理程序的作用域缩小到容器中.不能在容器内的Tas ...

  2. Flutter - 创建侧滑菜单

    侧滑菜单在安卓App里面非常常见,比如Gmail,Google Play,Twitter等.看下图 网上也有很多创建侧滑菜单的教程,我也来记录一下,自己学习创建Drawer的过程. 1. 创建一个空的 ...

  3. 微信小程序中的 hover-class

    微信小程序中,可以用 hover-class 属性来指定元素的点击态效果.但是在在使用中要注意,大部分组件是不支持该属性的. 目前支持 hover-class 属性的组件有三个:view.button ...

  4. python数据分析处理库-Pandas

    1.读取数据 import pandas food_info = pandas.read_csv("food_info.csv") print(type(food_info)) # ...

  5. Altium 中PCB的Gerber生产资料的输出详细步骤

    生产文件的输出,俗称Gerber out,Gerber文件是所有电路设计软件都可以产生的文件,在电子组装行业又称为模版文件(Stencil Data),在PCB制造业又称为光绘文件.可以说Gerber ...

  6. OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor

    在python用cv2.imread()读取图片的时候一直报错,检查了图片的绝对路径是存在的. 报错的图片用skimage.io.imread()是可以读的. 查了一下,有可能是原图片文件有什么嵌入错 ...

  7. Kafka发送到分区的message是否是负载均衡的?

    首先说结论,是负载均衡的.也就是说,现在有一个producer,向一个主题下面的三个分区发送message,没有指定具体要发送给哪个partition, 这种情况,如果是负载均衡的,发送的消息应该均匀 ...

  8. Django中的Project和App的区别

    Django是一个非常流行的用python编写的Web框架,在使用Django之前,我们需要了解一些基本的概念,这样可以在使用Django的时候对其有一个更加深入的把握.本文主要介绍Django中两个 ...

  9. 阿里云ubuntu16.04安装beef

    0x0 前言 环境:阿里云轻量服务器ubuntu16.04 需要安装2.4以上版本的ruby:https://www.cnblogs.com/Rain99-/p/10666247.html 参考资料 ...

  10. Mysql数据库的四大特性

    Mysql数据库事务的四大特性(ACID) 事务:把一组密不可分的操作系列集合在一起,这些操作要么全部执行,要么全部不执行. 1.原子性:事务是内定义的操作是一个整体,是不可分割的. 2.一致性:事务 ...