分组问题。年龄<=平均值的宇航员可选择A和C组,年龄>平均值的可选择B和C组,每两个有矛盾的宇航员不能分在一组,求一组可能的分组情况

关键词:分组问题:2sat

做法:每个宇航员选择A/B,对应于true,选择C,对应于false,

2sat问题:将每个元素的两个选择对应于true和false;将条件对应于子句xi:true/false or xj:true/false。

本题中同组矛盾对应两个子句:(xi==1||xj==1)&&(xi==0||xj==0);不同组矛盾对应一个句子:(xi==1||xj==1)

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<stack>
#define ll long long
#define INF 0x3f3f3f3f
#define maxn 100010
#define maxm 100010
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;int n,m;
int kind[maxn];
int age[maxn],sum;
int mark[maxn<<2],S[maxn<<2],c;
struct Edge{int to,next;
}edge[maxm<<4];
int head[maxn<<3],tot;void add(int u,int v){edge[tot].to=v,edge[tot].next=head[u],head[u]=tot++;
}void add_clause(int x,int xval,int y,int yval){x=x*2+xval,y=y*2+yval;add(x^1,y),add(y^1,x);
}void build(){//2*i+1:A/B 2*i:Cmem(head,-1),tot=0for(int i=1;i<=m;i++){int a,b;scanf("%d%d",&a,&b);a--,b--;if(kind[a]==kind[b]){add_clause(a,1,b,1),add_clause(a,0,b,0);}else add_clause(a,1,b,1);}
}bool dfs(int u){if(mark[u]) return true;if(mark[u^1]) return false;mark[u]=true;S[c++]=u;for(int i=head[u];i!=-1;i=edge[i].next){if(!dfs(edge[i].to)) return false;}return true;
}bool judge_2sat(){mem(mark,0);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;
}void print_2sat(){if(judge_2sat()){for(int i=1;i<2*n;i+=2){if(mark[i]){if(kind[i/2]==1) printf("A\n");else printf("B\n");}else printf("C\n");}}else printf("No solution.\n");
}int main(){//freopen("a.txt","r",stdin);while(scanf("%d%d",&n,&m)!=EOF){if(!n&&!m) break;sum=0,mem(kind,0);for(int i=0;i<n;i++){scanf("%d",&age[i]);sum+=age[i];}for(int i=0;i<n;i++)if(n*age[i]>=sum) kind[i]=1;else kind[i]=2;build();print_2sat();}return 0;
}

LA3713 Astronauts相关推荐

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

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

  2. Confluence 6 创建小组的公众空间

    2019独角兽企业重金招聘Python工程师标准>>> 现在是我们可以开始创建公众空间的时候了,全世界都希望知道这个项目和勇敢的探险活动. 在这个步骤中,我们将会创建一个项目小组的空 ...

  3. during怎么念_during是什么意思_during的翻译_音标_读音_用法_例句_爱词霸在线词典...

    全部 四级 六级 高考 考研 In his book, Team of Teams, General Stanley McChrystal describes how the army's hiera ...

  4. 马斯克终结美国载人航天的“寄俄篱下”,SpaceX首次正式商业载人任务圆满成功...

    萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 点火,发射! 8点27分30秒,载有4名宇航员的SpaceX龙飞船,再次将四名宇航员送上太空. 2分36秒后,龙飞船与一级火箭分离: 点火1 ...

  5. The Power of Ten – Rules for Developing Safety Critical Code

    New Horizon 探测器的代码就是 JPL 写的,真厉害 http://pixelscommander.com/wp-content/uploads/2014/12/P10.pdf Gerard ...

  6. Dart Way 1

    缘起 Dart 可以同时在 Mobile/Web/Server 三端跑,很像 nodejs,不过没有 nodejs 那么好命 需要一个可以打通 Mobile.Web 的 tk,又不想用 RN的,可以跟 ...

  7. 10个最佳Node.js企业应用案例:从Uber到LinkedIn

    译者按: Node.js 8已经发布了,NPM模块每周下载量早已超过10亿,从Uber到LinkedIn都在使用Node.js,谁说JavaScript不能写后台? 原文: 10 best Node. ...

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

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

  9. [转]有关gimbal lock的详细解释(真的好详细)

    从阿波罗13到gimbal lock,哈哈,各位请慢用-- WHAT IS GIMBAL LOCK? ================== ONE 华丽的分割线==================== ...

  10. Python之深入解析如何制作国际空间站实时跟踪器

    一.前言 Open Notify 是一个开源项目,旨在为 NASA 的一些出色数据提供简单的编程接口. open-notify.org 的作者做了一些工作,以获取原始数据并将其转换为与太空和航天器有关 ...

最新文章

  1. ubuntu 使用阿里云 apt 源
  2. 《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素
  3. Shader 中的随机与噪声
  4. Android应用程序键盘(Keyboard)消息处理机制分析(3)
  5. JAVA中toString方法的作用(转)
  6. 超出内容用省略号替代
  7. 工作笔记-增加swap分区空间
  8. 中文linux最小,35M的中文linux硬盘简单安装方法Live-CD:SliTaz.tw-全世界最小的li
  9. Python图片攻击
  10. fastText、TextCNN、TextRNN……这里有一套NLP文本分类深度学习方法库供你选择
  11. 计算机网络基础学ppt,计算机网络基础学习情景.ppt
  12. MySQL(13)-----多表查询(子查询)
  13. OMRON欧姆龙触摸屏维修NT620C-ST141-E
  14. DeepMind AI 科学家:2020年NLP和ML领域十大研究进展
  15. 用阿里云 DNS SDK 实现动态域名解析
  16. 大数乘法——大数问题
  17. 六、完成Teigha.net在界面插入直线,多线段,弧线,圆形,点,图片,dwf文件等功能
  18. Requested setting INSTALLED_APPS, but settings are not configured. You must either define the env...
  19. IntelliJ Mac 常用快捷键
  20. 哪里有期货开户的正规途径?

热门文章

  1. ABP官方文档(一)【入门介绍】
  2. 控制反转和依赖注入的理解(通俗易懂)
  3. git commit --amend 的使用记录
  4. Spring Boot:Canonical names should be kebab-case (‘-‘ separated), lowercase alpha-numeric characters
  5. 深度学习:卷积神经网络从入门到精通
  6. 人机交互-10-交互设计模型
  7. 【Python】爬取2019年男篮世界杯数据,并可视化
  8. UOS 下wine的记录
  9. 起得比鸡早,睡得比狗晚,干得比驴多,吃得比猪差
  10. 随笔小感,或许就叫一见误终身