题目大意:
有A, B, C三个任务分配给n个宇航员, 其中每个宇航员要被分配一个任务。所有年龄大于平均年龄的宇航员可以选择A, C两种任务,其余人只能选择B, C两种任务, 同时这n个宇航员中有m组矛盾, i 和 j 之间矛盾表示 i 与 j 不能参与同一项任务。
问每个宇航员应如何分配任务。
分析:
本题是一个典型的2-Sat类型的题目,宇航员之间的矛盾有两种情况, 分别表示两个宇航员属于同一类型和不属于同一类型时候的选择,我们用真来表示选择A或B, 假来表示选择C, 那么当 i 和 j 两个宇航员属于同类时, 就说明 i 为真时 j 必定为假, 反之亦然。否则,只需要两者不同为假即可。
代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 100000 + 10;struct Twosat {int n;vector<int> G[maxn*2];bool mark[maxn*2];int S[maxn*2], c;void init(int n) {this->n = n;memset(mark, 0, sizeof(mark));for(int i=0; i<2*n; i++) G[i].clear();}bool dfs(int x) {if(mark[x^1]) return false;if(mark[x]) return true;mark[x] = true;S[c++] = x;for(int i=0; i<G[x].size(); i++) if(!dfs(G[x][i])) return false;return true;}//x = xval or y = yvalvoid add_clause(int x, int xval, int y, int yval) {x = x*2 + xval;y = y*2 + yval;G[x^1].push_back(y); // when x != xval , y must = yval;G[y^1].push_back(x); // when y != yval , x must = xval;}bool solve() {for(int i=0; i<2*n; i+=2) if(!mark[i] && !mark[i^1]) {c = 0;if(!dfs(i)) {while(c > 0) mark[S[--c]] = false;if(!dfs(i^1)) return false;}}return true;}
}solver;int n, m, u, v;
bool type[maxn];
int age[maxn], age_sum;void init() {solver.init(n);age_sum = 0;memset(type, false, sizeof(type));
}
int main() {
#ifndef ONLINE_JUDGEfreopen("data.txt", "r", stdin);freopen("ans.txt", "w", stdout);
#endifwhile(scanf("%d%d", &n, &m) == 2 && n+m) {init();for(int i=0; i<n; i++) {scanf("%d", &age[i]);age_sum += age[i];}for(int i=0; i<n; i++) type[i] = (age[i] * n >= age_sum);for(int i=0; i<m; i++) {scanf("%d%d", &u, &v); u--, v--;if(type[u] == type[v]) solver.add_clause(u, 1, v, 1), solver.add_clause(u, 0, v, 0);else solver.add_clause(u, 1, v, 1);}if(!solver.solve()) printf("No solution.\n");else {for(int i=0; i<n; i++) {if(solver.mark[i*2+1]) printf("%c\n", type[i] ? 'A' : 'B');else printf("%c\n", 'C');}}}return 0;
}

La3713 Astronauts 2-Sat相关推荐

  1. UVA1391 Astronauts(ACM - ICPC 2006 Europe - Central)(2 - SAT问题、输出方案)

    虽然题目里有A.B.C三种状态,但是每个人只有两个状态可以选择,显然是一道2-SAT: 建图的话,假设选择A(或者B)为i+n,选择C为i:首先当两个人讨厌时,一个人选C,则另一个一定选另一个,连两条 ...

  2. 模板 - 2 - SAT问题

    整理的算法模板合集: ACM模板 注意一个坑,2SAT问题中如果要求你输出方案,如果你的代码输出的跟样例不一样,不要着急,因为2SAT 问题本来就是有多解,结果我样例不过,交上去就A了 方案输出时,c ...

  3. 计算机学院 图论方向,成电计算机学院本科生在计算机科学理论方向重要国际会议SAT上发表论文...

    近日,计算机科学与工程学院(网络空间安全学院)2017级本科生和肖鸣宇教授撰写的论文"A Fast Algorithm for SAT in Terms of Formula Length& ...

  4. MIT录取不再看SAT科目成绩:曾是华裔传统优势,数学等学科测验更是中国留学生强项...

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 美国麻省理工学院今天在招生网站上宣布,决定不再考虑将SAT科目考试作为录取过程的一部分. 这一决定从2020~2021学年开始生效. SA ...

  5. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求是多少?

    加州大学欧文分校对于SAT成绩的要求是多少?现在申请美国本科,很多都是需要同学们提供sat成绩的额,下面托普仕留学老师为大家介绍SAT多少分才能申请加州大学欧文分校?同学们在申请之前要多注意院校信息. ...

  6. 欧文分校计算机新sat多少分录取,加州大学欧文分校SAT成绩要求

    下面为大家介绍的是加州大学欧文分校University of California Irvine的SAT成绩要求.加州大学欧文分校University of California Irvine是美国加 ...

  7. 如何使用SAP事务码SAT进行UI应用的性能分析

    Sent: Wednesday, July 11, 2012 7:49 PM Subject: [Knowledge share]How to trace UI transaction using S ...

  8. 使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈

    今天是农历鼠年大年初四,本文是鼠年第4篇文章,也是汪子熙公众号第203篇原创文章. 大家这几天在家里宅得如何了?貌似不少朋友都闷坏了. 我们继续学习. Jerry之前的文章 SAP错误消息调试之七种武 ...

  9. 使用ABAP SAT工具分析SAP OData service实现明细

    Created by Wang, Jerry, last modified on Mar 26, 2015 使用SAT运行OData service测试report: 直接运行report: 确保OD ...

  10. 使用SAT研究IBASE hierarchy读取性能

    Created by Jerry Wang on Mar 06, 2014 1. transaction code SAT,创建一个新的variant例如ZJERRY, 确保Aggregation为N ...

最新文章

  1. 127 - Accordian Patience
  2. (翻译)Real-UID,Effective-UID,Saved-UID区别
  3. 自学python需要买书吗-我的孩子需要学习Python吗?几岁开始学?有什么书籍推荐?...
  4. qsort()的用法
  5. 16、React Native实战之TextInput组件
  6. AcWing479.加分二叉树(区间DP)题解
  7. win10 初试tracert
  8. 搞定HTML\CSS之background属性
  9. UER-py快速上手
  10. 手机电商营销模式探讨
  11. spring boot新闻管理系统 毕业设计源码211113
  12. c++ value categories
  13. 如何提高团队管理能力3
  14. Latex, overleaf 输入中文 可行方法
  15. Mysql table_definition_cache
  16. 三大设计模式详细总结
  17. Windows内核安全与驱动开发
  18. 使用 github pages, 部署静态网页
  19. gmp计算机软件系统分类原则,新版GMP对自动化设备、计算机系统软件的验证要求...
  20. 破解linux root密码(方式 重置root密码)

热门文章

  1. 同源、跨域、跨站、SameSite与withCredentials
  2. 轻量级架构和重量级架构
  3. mac_excel_条件格式
  4. 关于在电脑单机上面运行魔兽世界的方法
  5. CRM系统更换服务器,CRM系统三种常见安装实施解决方式
  6. 计算机网络定义记不住,win10下微软拼音输入法记不住自定义输入词语怎么办
  7. 使用WINPE制作U盘启动
  8. 关于利用Unity制作游戏登陆界面这件事
  9. 昔者,圣人之作易也,幽赞神明而生蓍
  10. flutter 国际化(组件英文转中文)