2-sat。。。求解2-sat方案直接每个变量枚举就行了,lrj的代码很靠谱。。。

#include<bits/stdc++.h>
using namespace std;
const int N = ;
struct edge {
int nxt, to;
} e[N << ];
int n, m, x, cnt, top;
bool mark[N];
int head[N], u[N], v[N], age[N], st[N];
void Init()
{
cnt = ; top = x = ;
memset(head, , sizeof(head));
memset(mark, false, sizeof(mark));
}
void link(int u, int v)
{
e[++cnt].nxt = head[u];
head[u] = cnt;
e[cnt].to = v;
}
bool dfs(int u)
{
if(mark[u ^ ]) return false;
if(mark[u]) return true;
mark[u] = true; st[++top] = u;
for(int i = head[u]; i; i = e[i].nxt) if(!dfs(e[i].to)) return false;
return true;
}
bool solve()
{
for(int i = ; i <= * n + ; i += ) if(!mark[i] && !mark[i + ])
{
top = ;
if(!dfs(i))
{
while(top) mark[st[top--]] = false;
if(!dfs(i + )) return false;
}
}
return true;
}
int main()
{
while(scanf("%d%d", &n, &m))
{
if(n == && m == ) break;
Init();
for(int i = ; i <= n; ++i) scanf("%d", &age[i]), x += age[i];
for(int i = ; i <= m; ++i)
{
int u1, v1, u2, v2; scanf("%d%d", &u[i], &v[i]);
u1 = u[i] << ; u2 = u1 + ; v1 = v[i] << ; v2 = v1 + ;
if(age[u[i]] * n >= x)
{
if(age[v[i]] * n >= x) link(u2, v1), link(v1, u2), link(u1, v2), link(v2, u1);
if(age[v[i]] * n < x) link(u1, v2), link(v1, u2);
}
else
{
if(age[v[i]] * n >= x) link(u1, v2), link(v1, u2);
if(age[v[i]] * n < x) link(u1, v2), link(v2, u1), link(u2, v1), link(v1, u2);
}
}
if(!solve()) { puts("No solution."); continue; }
for(int i = ; i <= n; ++i)
{
if(mark[i * ]) puts("C");
else if(age[i] * n >= x) puts("A");
else puts("B");
}
}
return ;
}

la3713的更多相关文章

  1. UVA1391/LA3713 Astronauts

    题意:有A.B.C3个任务分配给n个宇航员,其中每个宇航员恰好分配一个任务.假设n个宇航员的平均年龄为x,只有年龄大于x的才能领取A任务:只有年龄严格小于x的才能领取B任务,而任务C没有限制.有m对宇 ...

  2. 【LA3713 训练指南】宇航员分组 【2-sat】

    题意 有A,B,C三个任务要分配给n个宇航员,其中每个宇航员恰好要分配一个任务.设所有n个宇航员的平均年龄为x,只有年龄大于或等于x的宇航员才能分配任务A:只有年龄严格小于x的宇航员才能分配任务B,而 ...

  3. 【UVALive - 3713】Astronauts (2-SAT)

    题意: 有n个宇航员,按照年龄划分,年龄低于平均年龄的是年轻宇航员,而年龄大于等于平均年龄的是老练的宇航员. 现在要分配他们去A,B,C三个空间站,其中A站只有老练的宇航员才能去,而B站是只有年轻的才 ...

随机推荐

  1. Oracle 把一个用户所有表的读权限授予另一个用户

    create user <USER_NAME> identified by <PASSWORD>; grant create session TO <USER_NAME& ...

  2. [USACO06JAN] 牛的舞会 The Cow Prom

    题目描述 The N (2 <= N <= 10,000) cows are so excited: it's prom night! They are dressed in their ...

  3. 【转】Flex 布局

    网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...

  4. 利用postman进行接口测试并发送带cookie请求的方法

    做web测试的基本上都用用到postman去做一些接口测试,比如测试接口的访问权限,对于某些接口用户A可以访问,用户B不能访问:比如有时需要读取文件的数据.在postman上要实现这样测试,我们就必要 ...

  5. ceph 简介

    Ceph 存储集群 数据的存储 伸缩性和高可用性 CRUSH 简介 集群运行图 高可用监视器 高可用性认证 智能程序支撑超大规模 动态集群管理 关于存储池 PG 映射到 OSD 计算 PG ID 互联 ...

  6. gif & tools

    gif & tools https://www.cockos.com/licecap/ https://www.cockos.com/licecap/licecap128-install.ex ...

  7. Codeforces Round #235 (Div. 2)

    A. Vanya and Cards time limit per test 1 second memory limit per test 256 megabytes input standard i ...

  8. noip模拟赛 enc

    [问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成, 对于每一个字母, 我们将它唯一地映射到另一个字母. 例如考虑映射规则:a->b, b- ...

  9. java多线程编程核心技术(一)--多线程技能

    1.进程和线程的概念 1.进程:进程是操作系统的基础,是一次程序的执行,是一个程序及其数据在处理机上顺序执行时所发生的活动,是程序在一个数据集合上运行的过程,他是系统进行资源分配和调度的一个独立单位. ...

  10. sharepoint 2013安装--没安装成功--机器配置太低了

    油管上的sharepoint2013安装教程 https://www.youtube.com/watch?v=3lQVMGWJQho 下载脚本的网址 http://gallery.technet.mi ...