la3713
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的更多相关文章
- UVA1391/LA3713 Astronauts
题意:有A.B.C3个任务分配给n个宇航员,其中每个宇航员恰好分配一个任务.假设n个宇航员的平均年龄为x,只有年龄大于x的才能领取A任务:只有年龄严格小于x的才能领取B任务,而任务C没有限制.有m对宇 ...
- 【LA3713 训练指南】宇航员分组 【2-sat】
题意 有A,B,C三个任务要分配给n个宇航员,其中每个宇航员恰好要分配一个任务.设所有n个宇航员的平均年龄为x,只有年龄大于或等于x的宇航员才能分配任务A:只有年龄严格小于x的宇航员才能分配任务B,而 ...
- 【UVALive - 3713】Astronauts (2-SAT)
题意: 有n个宇航员,按照年龄划分,年龄低于平均年龄的是年轻宇航员,而年龄大于等于平均年龄的是老练的宇航员. 现在要分配他们去A,B,C三个空间站,其中A站只有老练的宇航员才能去,而B站是只有年轻的才 ...
随机推荐
- JS设计模式—节流模式的实际应用
在实际工作中,我们会经常遇到这样的业务场景,比如点击按钮提交表单,点击一次发一次请求,如果快速点击多次会发送多次请求,这样发送了多次请求是我们不愿意看到的.又比如输入框我们输入内容会调搜索的接口,那么 ...
- Docker 安装并定制 Nginx 服务器
安装并定制 Nginx 1.查阅对应的官方文档,首先下载镜像文件: [spider@izwz9d74k4cznxtxjeeur9z local]$ sudo docker pull nginx [su ...
- 2018NOIP普及T4---对称二叉树
题目 对称二叉树 题目描述 思路 检查是否符合对称条件 条件很简单——结构对称&&点权对称 要做到点权对称其实也就顺便结构对称了 于是条件可以简化为点权对称 可以考虑并行搜索 bo ...
- 搜索--P1101 单词方阵
题目描述 给一n×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 8 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词 ...
- 剑指offer---以O(1)时间删除链表节点
问题:删除链表节点 要求:以O(1)时间 对于删除指定索引的链表元素大家都很熟悉,思路一般是从头遍历链表直到指定索引位置删除元素,然后维护一下指针即可,时间复杂度O(n).代码如下: // 删除pos ...
- <MySQL>入门六 变量
/* 变量 系统变量: 全局变量 会话变量 自定义变量 用户变量 局部变量 */ -- ------------系统变量-------------------- /* 变量由系统提供,不是用户定义,属 ...
- layui 动态表格之合并单元格
需求: 下面用excel表格大概模拟下需求,左边是原来的,要改成右边这样的: ①第一步:再生成表格后调用此方法,以合并重复的单元格 done : function(res, curr, count) ...
- C++关键字:explicit
#include "pch.h" #include <iostream> using namespace std; class BaseClass { public: ...
- 手机通过Charles用线上域名访问PC本地项目
最近调试微信公众号,由于微信授权需要线上正式环境的域名,笔者想把手机公众号网页重定向到PC本地localhost调试. 该方法通过Charles代理转发,适用所有需要域名重定向的场景,例如手机通过在线 ...
- 腾讯云,搭建Http静态服务器环境
任务时间:15min ~ 30min 搭建静态网站,首先需要部署环境.下面的步骤,将告诉大家如何在服务器上通过 Nginx 部署 HTTP 静态服务. 安装 Nginx 在 CentOS 上,可直接使 ...