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站是只有年轻的才 ...
随机推荐
- 实战:tcp链接rst场景tcpdump分析
RST为重置报文段,它会导致TCP连接的快速拆迁,且不需要ack进行确认. 1.针对不存在的端口的连请求 客户端: #include <unistd.h> #include <sys ...
- Android中ProgressDialog自动消失
主要函数部分代码: final ProgressDialog proDialog = android.app.ProgressDialog .show(MainActivity.this, " ...
- TWaver GIS在电信中的使用
GIS作为信息系统的重要组成部分,在电信行业中的应用由来已久.将GIS引入电信管理系统,GIS强大的功能就会得到充分的体现,GIS技术可以将各类电信信息系统以其特有的表现形有机整合在一起,并为真正做到 ...
- P1269 信号放大器
P1269 信号放大器 给一棵有根树,树的边上有距离.根上有一个信号发射器,会发生强度为 h 的信号,信号会往所有的节点传播,然而每经过一条边强度就会削减距离的大小,当信号到达某点时小于 1,则信号传 ...
- P4817 [USACO15DEC]Fruit Feast 水果盛宴
P4817 [USACO15DEC]Fruit Feast 水果盛宴 现在Bessie的饱食度为 00 ,她每吃一个橙子,饱食度就会增加 AA :每吃一个柠檬,饱食度就会增加 BB .Bessie还有 ...
- UVA - 12325 Zombie's Treasure Chest (分类搜索)
题目: 有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号整数.计算最多能装多大价值的宝物,每种宝物都必须拿非负整数个. 思 ...
- mysql insert一条记录后 返回创建记录主键id的方法
mysql插入数据后返回自增ID的方法 mysql和oracle插入的时候有一个很大的区别是,oracle支持序列做id,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得 ...
- TestNG套件测试(二)
在xml中指定要运行的整个包来执行套件测试 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- ubuntu 常见的操作命令
原博客地址为:https://blog.csdn.net/qq_33421080/article/details/76551554 1.cd命令: cd:切换到当前用户根目录,默认[/home/用户名 ...
- 对于 前端请求Django 后端服务出现403 Forbidden (CSRF token missing or incorrect.) 问题的解析
Django中使用ajax post向後臺傳送資料時403 Forbidden (CSRF token missing or incorrect.):的解決辦法 在Django中使用ajax post ...