题目:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1714

题目大意:有n个宇航员,给你每个人的年龄。设 ave 为他们的平均年龄,年龄大于等于 ave 才能执行任务A,小于才能执行任务B ,而 任务C 则是谁都可以执行的。再给你 m 对相互憎恨的人,这两个人不能安排在同一个任务里。让你给你出一种任务安排方案,如果不行,就输出:“No solution.”。

解题思路:仔细分析下就知道,每个人只有两种选择,要么A、C,要么B、C。其实就是2-sat,先判断,然后输出路径即可。对于每对相互憎恨的人i、j,如果他们年龄段相同,那么就是xi^xj,非xi^非xj。如果不相同,就是 非i^非xj (^表示左右只能选一个的意思,也就是两者矛盾)。输出路径只要把mark的东西输出来就好。此题还有个易错的地方,判断年龄那里还有个坑,那就是浮点数的问题,判 >= 的时候会出错,就是这里错了一次,然后换成不用浮点数,把 n 成过去,全用整数就过了。

代码如下:

#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;const int MAXN = 111111;struct Two_Sat
{vector<int> G[MAXN<<1];bool mark[MAXN<<1];int n;int S[MAXN<<1],c;void init(int n){this->n = n;for(int i = 0;i < (n<<1);i++)G[i].clear();memset(mark,0,sizeof(mark));}void add_clause(int x,int x_val,int y,int y_val){x = (x<<1)+x_val;y = (y<<1)+y_val;G[x].push_back(y^1);G[y].push_back(x^1);}int dfs(int u){if(mark[u^1]) return 0;if(mark[u]) return 1;mark[u] = 1;S[c++] = u;for(int i = 0;i < G[u].size();i++)if(!dfs(G[u][i])) return 0;return 1;}int slove(){for(int i = 0;i < (n<<1);i += 2){if(!mark[i] && !mark[i+1]){c = 0;if(!dfs(i)){while(c){mark[S[--c]] = 0;}if(!dfs(i+1)) return 0;}}}return 1;}
} two;int age[MAXN];
int tot_age;int is_a(int x,int n)
{if(x*n >= tot_age) return 1;return 0;
}int is_b(int x,int n)
{if(x*n < tot_age) return 1;return 0;
}int main()
{int n,m;while(~scanf("%d%d",&n,&m)){if(n+m == 0) break;tot_age = 0;for(int i = 0;i < n;i++){scanf("%d",&age[i]);tot_age += age[i];}two.init(n);while(m--){int a,b;scanf("%d%d",&a,&b);a--;b--;if((is_a(age[a],n) && is_a(age[b],n)) || (is_b(age[a],n) && is_b(age[b],n)))two.add_clause(a,0,b,0);two.add_clause(a,1,b,1);}if(!two.slove())puts("No solution.");else{for(int i = 0;i < n;i++)if(two.mark[i<<1]){if(is_a(age[i],n)) puts("A");else puts("B");}else puts("C");}}return 0;
}/*
2 1
20
40
1 2
*/

UVALive 3713 Astronauts(2-sat+输出任意路径)相关推荐

  1. 训练指南 UVALive - 3713 (2-SAT)

    layout: post title: 训练指南 UVALive - 3713 (2-SAT) author: "luowentaoaa" catalog: true mathja ...

  2. android读取SDCard任意路径下的文件

    2019独角兽企业重金招聘Python工程师标准>>> 文件不能太大否则会报内存溢出 [java]  view plain copy package yu.bin; import j ...

  3. 输出任意一元二次函数的结果值

    输出任意一元二次函数的结果值: 一.学习要点: 1.函数可以作为一个函数的返回值,叫做返回函数. 参见:https://www.liaoxuefeng.com/wiki/001374738125095 ...

  4. 黑马程序员---java算法实现输出任意奇数维数独

    java算法实现输出任意奇数维数独 ----------- android培训.java培训.java学习型技术博客.期待与您交流! ----------- /** 该类可以打印任意维数数独,但是必须 ...

  5. DFS搜索和输出所有路径

    文章目录 1.DFS搜所有路径 2.用栈记录和输出路径 3.例题 3.1 C++代码 3.2 Python代码 4.真题 4.1 C++代码 4.2 Python代码   2022.12将出版蓝桥杯大 ...

  6. Python自动化整理文件“大升级”,任意路径下文件,都给你整理的明明白白!...

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者:Huny 关注下方作者博客园,精彩抢先看! h ...

  7. alias实现VREP/Coppeliasim等软件在任意路径以自定义名称启动

    利用alias实现VREP/Coppeliasim等软件在任意路径以自定义名称,即输入自定义别名的形式启动. 1.任意终端输入 gedit ~/.bashrc 2.进入bashrc后任意行输入 ali ...

  8. 艺赛旗(RPA)Python:遍历输出某路径下的所有文件和文件夹

    艺赛旗 RPA8.0全新首发免费下载 点击下载 http://www.i-search.com.cn/index.html?from=line1 详细内容请参看艺赛旗官网支持栏目:RPA社区 点击链接 ...

  9. 中秋佳节,实现一个自定义任意路径嫦娥奔月程序:过什么节,代码走起

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 大家好,我是佛系工程师❤️恬静的小魔龙❤️,不定时更新Unity开发技巧,觉 ...

  10. 输出任意边长的菱形————C语言实践应用(1)(完整源码)

            经过一段时间的学习后,想必大家都已经开始摩拳擦掌,迫不及待地想用C语言写一些程序了.         那么今天,我们就来学习C语言中常见的例子--输出任意边长的菱形          ...

最新文章

  1. 了解了解一下SQLSERVER里的鬼影记录
  2. ET.parse 中文
  3. [MySQL] 几句MySQL时间筛选SQL语句[进入查看]
  4. 【CyberSecurityLearning 附】渗透测试技术选择题 + 法律法规
  5. File类判断功能的方法
  6. 谷歌cloud_通过使用Google Cloud ML大规模提供机器学习模型,我们学到了什么
  7. Linux无法登陆,var目录权限修改导致SSH失败
  8. 95-50-040-java.nio.channels-NIO-NIO之Buffer(缓冲区)
  9. WinForm 下实现一个自动关闭的MessageBox
  10. eventemitter_节点JS事件模块和EventEmitter
  11. socket和udp
  12. 计算机网络原理(04741)自考学习笔记/备考资料
  13. 金士顿u盘数据恢复软件推荐
  14. 排队系统利用分布式设计的思考
  15. 关于o1,o2,o3
  16. 指纹支付 java lang6_支付宝;超6成人使用指纹、刷脸支付,网友;喜欢用密码!...
  17. Flutter中使用WebView内打开scheme链接 调用其他程序
  18. ECG,脉搏波,心率,心率变异性,血压
  19. 高质量网站哪里找?4个PPT自学网站告别高额培训费,看完受益一生
  20. RecyclerView EditText 数据错乱问题

热门文章

  1. linux美元符号切换为井号,struts2 (# % $)井号,百分号,美元符号的含义和使用方法举例...
  2. 宝塔备份文件到ftp服务器上,宝塔自动备份网站到FTP空间,宝塔备份ftp空间
  3. Python中神奇的第三方库:Faker假数据生成器
  4. 基于SSM架构的网上书城系统
  5. 几种平均数的物理意义应用场景
  6. 私域运营电商平台和传统电商平台有什么不同?
  7. R语言列联表的统计分析及假设检验
  8. android6.0重力工具箱,真正免root的重力工具箱详细使用教程
  9. 熟识 : 计算机文化(收藏)
  10. CSS 函数摘抄笔记1207