虽然题目里有A、B、C三种状态,但是每个人只有两个状态可以选择,显然是一道2-SAT; 建图的话,假设选择A(或者B)为i+n,选择C为i;首先当两个人讨厌时,一个人选C,则另一个一定选另一个,连两条边(x,y+n)和(y,x+n),同时若是两个人同类,则还需加上限制使两个人不能同时选A(或同时选B),就再连两条边(x+n,y),(y+n,x);最后跑一边tarjan
输出答案的话就不需要在跑一边拓扑排序了,因为在tarjan时强连通分量被染色的顺序就是拓扑序,所以若col(i)<col(i+n),就表示选择A(或B),否则选C。

注意一个坑,2SAT问题中如果要求你输出方案,如果你的代码输出的跟样例不一样,不要着急,因为2SAT 问题本来就是有多解,结果我样例不过,交上去就A了

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>using namespace std;
typedef long long ll;
const int N = 5000007, M = 5000007, INF = 0x3f3f3f3f;int n, m;
int dfn[N], low[N], num;
int head[N], ver[M], nex[M], tot;
int stk[N], top;
bool ins[M];
int scc_cnt;
int color[N];void init()
{memset(head, -1, sizeof head);memset(dfn, 0, sizeof dfn);memset(low, 0, sizeof low);memset(color, 0, sizeof color);tot = num = scc_cnt = 0;
}int age[N];void add(int x, int y)
{ver[tot] = y;nex[tot] = head[x];head[x] = tot ++ ;
}void tarjan(int x)
{dfn[x] = low[x] = ++num;stk[++ top] = x;ins[x] = 1;for(int i = head[x]; ~i; i = nex[i]){int y = ver[i];if(!dfn[y]){tarjan(y);low[x] = min(low[x], low[y]);}else if(ins[y])low[x] = min(low[x], dfn[y]);}if(low[x] == dfn[x]){int y;++scc_cnt;color[x] = scc_cnt;do{y = stk[top -- ];ins[y] = false;color[y] = scc_cnt;}while(x != y);}
}
int main()
{while(scanf("%d%d", &n, &m)!= EOF && n + m){init();int sum = 0;for(int i = 1;i <= n; ++ i){scanf("%d", &age[i]);sum += age[i];}for(int i = 1; i <= n; ++ i){age[i] = (age[i] * n >= sum);}for(int i = 1; i <= m; ++ i){int p, q;scanf("%d%d", &p, &q);//i + n : A / B//i : B / Cif(age[p] == age[q])add(p + n, q), add(q + n, p);add(p, q + n),add(q, p + n);}for(int i =  1; i <= 2 * n; ++i){if(!dfn[i])tarjan(i);}bool flag = 1;for(int i = 1; i <= n; ++ i){if(color[i] == color[i + n]){puts("No solution."), flag = 0;break;}}if(!flag)continue;for(int i = 1; i <= n; ++ i){//谁小选谁 i + n 小的话,就是 i + n : A / Bif(color[i] > color[i + n]){if(age[i])//根据题意1为大于平均值x,选A,B中的Aputs("A");else puts("B");}else puts("C");}}return 0;
}

UVA1391 Astronauts(ACM - ICPC 2006 Europe - Central)(2 - SAT问题、输出方案)相关推荐

  1. ACM/ICPC 集:

    ACM/ICPC在线题库集锦: 网址:http://acm.uva.es/ 简称: uva 全称: Valladolid Programming Contest Site 所在国:西班牙 提交方式:w ...

  2. PKU ACM/ICPC竞赛队最近八年比赛成绩

    PKU ACM/ICPC竞赛队最近八年比赛成绩 (不含预选赛前十名以外) 竞赛名称 年度 获奖名次 学生姓名 备 注 第29届ACM国际 大学生程序设计竞赛 亚洲区预选赛 2004 北京赛区第4名 饶 ...

  3. 2019 ACM - ICPC 上海网络赛 E. Counting Sequences II (指数型生成函数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  4. 2019 ACM - ICPC 西安邀请赛 B. Product (杜教筛) 简单数论(bushi)

    G.(2019 ACM/ICPC 全国邀请赛(西安)B) Product Weblink https://nanti.jisuanke.com/t/39269 Problem && S ...

  5. 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  6. 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...

  7. P5801 [SEERC2019]Game on a Tree(ACM - ICPC 2019)(树的最大匹配)(完美匹配)

    P5801 [SEERC2019]Game on a Tree(ACM - ICPC 2019)(树的最大匹配) 完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配. #i ...

  8. 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)

    栈应用 例题6-2 铁轨(Rails, ACM/ICPC CERC 1997, UVa 514) 错解 1.每次要把栈清空 2.不能用空的栈(栈顶)去比较 #include<iostream&g ...

  9. Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online

    网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...

最新文章

  1. 一篇带你了解TCP/IP 概念
  2. affectnet数据集_处理表情识别中的坏数据:一篇CVPR 2020及两篇TIP的解读
  3. 201521123111《Java程序设计》第14周学习总结
  4. 你们应该听说过”w8ay“这个ID吧!一个喜欢造轮子的小子
  5. linux下的静态库与动态库
  6. oracle索引分类与区分,深入理解Oracle表(6):堆组织表(HOT)和索引组织表(IOT)的区别...
  7. 产品壁垒_打破人员,流程和产品之间的壁垒
  8. django 使用原生SQL语句反向生成MODELS.PY中的表结构
  9. Linux 命令之 scp 文件传输
  10. 基于Python和MySQL的学生信息管理系统
  11. eclipse中文语言包安装
  12. java deff_java – 在配置中添加时出现Spring NoClassDefF...
  13. MYS-6ULX-IOT 开发板测评——Yocto 创建嵌入式 Linux 发行版
  14. 如何修改PDF文件的标题
  15. 港美股交易系统开发框架构造简述篇
  16. 社会心理学第四章 态度与行为
  17. 手游服务器技术的选择
  18. ads的项目下的文件全部消失不见了
  19. 北漂去帝都大医院求医到底有多难?我的真实经历,真的是一路坎坷与辛酸~
  20. Vlan 单线复用之复式二层住宅网络改造实操案例(一)

热门文章

  1. 教程 | OpenCV4中的极坐标变换
  2. 聊聊找工作中的项目经验问题(推荐系统和智能问答)
  3. [转] 先验概率and后验概率
  4. 如何解决diff: /../Podfile.lock: No such file or directory 的问题
  5. ZABBIX利用自带模板监控mysql数据库
  6. POJ 2185 正解 KMP
  7. Ajax请求全局配置
  8. Excel事半功倍的应用
  9. 关于客户需求分析的讨论
  10. mysql json类型数组索引_MySQL JSON 类型数据操作