【UVALive - 3713】Astronauts (2-SAT)
题意:
有n个宇航员,按照年龄划分,年龄低于平均年龄的是年轻宇航员,而年龄大于等于平均年龄的是老练的宇航员。
现在要分配他们去A,B,C三个空间站,其中A站只有老练的宇航员才能去,而B站是只有年轻的才能去,C站都可以去。
有m对宇航员相互讨厌,不能让他们在同一个空间站工作。
输出每个宇航员应分配到哪个空间站,如果没有则输出No solution.
分析:
对于每个宇航员,有两种选择,(A,B)或C。第一个选择中取A还是取B取决于年龄。
构图,2-SAT找满足题意的方案再输出即可。
代码如下:
- #include<cstdio>
- #include<cstdlib>
- #include<cstring>
- #define Maxn 100010
- #define Maxm 100010
- int n,m;
- int age[Maxn],first[*Maxn],mark[*Maxn],s[*Maxn];
- int c,v;
- struct node
- {
- int x,y,next;
- }t[*Maxm];int len;
- void ins(int x,int y)
- {
- t[++len].x=x;t[len].y=y;
- t[len].next=first[x];first[x]=len;
- }
- bool dfs(int x)
- {
- if(mark[x^]) return ;
- if(mark[x]) return ;
- mark[x]=;
- s[++c]=x;
- for(int i=first[x];i;i=t[i].next)
- if(!dfs(t[i].y)) return ;
- return ;
- }
- bool solve()
- {
- memset(mark,,sizeof(mark));
- for(int i=;i<n;i++)
- if(!mark[*i]&&!mark[*i+])
- {
- c=;
- if(!dfs(*i))
- {
- while(c>) mark[s[c--]]=;
- if(!dfs(*i+)) return ;
- }
- }
- return ;
- }
- void output()
- {
- for(int i=;i<n;i++)
- if(mark[i*+]) printf("C\n");
- else if(age[i]*n>=v) printf("A\n");
- else printf("B\n");
- }
- int main()
- {
- while()
- {
- scanf("%d%d",&n,&m);
- len=;v=;
- if(n==&&m==) break;
- memset(first,,sizeof(first));
- for(int i=;i<n;i++) scanf("%d",&age[i]),v+=age[i];
- for(int i=;i<=m;i++)
- {
- int x,y;
- scanf("%d%d",&x,&y);x--;y--;
- ins(x*+,y*);ins(y*+,x*);
- if(!((age[x]*n>=v)^(age[y]*n>=v))) ins(x*,y*+),ins(y*,x*+);
- }
- if(!solve()) printf("No solution.\n");
- else output();
- }
- return ;
- }
[LA3713]
2016-03-18 13:19:17
【UVALive - 3713】Astronauts (2-SAT)的更多相关文章
- 【 UVALive - 5095】Transportation(费用流)
Description There are N cities, and M directed roads connecting them. Now you want to transport K un ...
- 【LOJ#6060】Set(线性基)
[LOJ#6060]Set(线性基) 题面 LOJ 题解 好题啊QwQ. 首先\(x1\oplus x2=s\)是定值.而\(s\)中假设某一位上是\(1\),则\(x1,x2\)上必定有一个是\(1 ...
- 【LOJ#6073】距离(主席树)
[LOJ#6073]距离(主席树) 题面 LOJ 题解 两点间的距离是\(dep[x]+dep[y]-2dep[LCA]\). 那么题目要求的东西拆开维护,唯一不好做的就是\(2dep[LCA]\). ...
- 【LOJ#6029】市场(线段树)
[LOJ#6029]市场(线段树) 题面 LOJ 题解 看着就是一个需要势能分析的线段树. 不难发现就是把第二个整除操作化为减法. 考虑一下什么时候整除操作才能变成减法. 假设两个数为\(a,b\). ...
- 【BZOJ3817/UOJ42】Sum(类欧)
[BZOJ3817/UOJ42]Sum(类欧) 题面 BZOJ UOJ 题解 令\(x=\sqrt r\),那么要求的式子是\[\sum_{d=1}^n(-1)^{[dx]}\] 不难发现,对于每个\ ...
- 【UOJ#188】Sanrd(min_25筛)
[UOJ#188]Sanrd(min_25筛) 题面 UOJ 题解 今天菊开讲的题目.(千古神犇陈菊开,扑通扑通跪下来) 题目要求的就是所有数的次大质因子的和. 这个部分和\(min\_25\)筛中枚 ...
- 【POJ 1201】 Intervals(差分约束系统)
[POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS Memory Limit: ...
- 【LOJ#573】【LNR#2】单枪匹马(线段树)
[LOJ#573][LNR#2]单枪匹马(线段树) 题面 LOJ 题解 考虑拿线段树维护这个值,现在的问题就是左右怎么合并,那么就假设最右侧进来的那个分数是\(\frac{x}{y}\)的形式,那么就 ...
- 【UVALive - 3487】 Duopoly(网络流-最小割)
Description The mobile network market in country XYZ used to be dominated by two large corporations, ...
随机推荐
- hadoop错误FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOException There appears to be a gap in the edit log
错误: FATAL org.apache.hadoop.hdfs.server.namenode.NameNode Exception in namenode join java.io.IOExcep ...
- XC文件管理器(Android应用)
XC文件管理器,是基于Android4.4开发的一个方便易用的文件管理器,具有文件的目录管理和文件的管理,主要包括文件的新建.删除.重命名.复制,移动剪切以及文件详情查看等文件和目录的功能,同时支持文 ...
- wiki 使用笔记
Wiki 安装:Linux(Redhat EL5.3)下安装配置MediaWiki wiki配置: 配置文件:DefaultSettings.php //权限等配置 左边导航条:/wiki/inde ...
- float浮动之后高度自适应失效解决方案
float浮动之后高度自适应失效解决方案 >>>>>>>>>>>>>>>>>>>> ...
- quartz.net 基于数据库的简单实现
前面简单学习了通过XML配置或者内存指定的方式实现调度任务.但此用法实战用途较小,企业上多需要分布式集群的方式.quart团队也考虑到了这点,于是有了我们今天要学习的.基于数据库实现分布式. Name ...
- 基于.net 职责链来实现 插件模式
插件式的例子 QQ电脑管家,有很多工具列表,点一下工具下载后就可以开始使用了 eclipse ,X Server 等等 插件式的好处 插件降低框架的复杂性,把扩展功能从框架中剥离出来 让第三方有机会来 ...
- Python编写相关注意事项
1.# -*- coding: utf-8 -*-代码首部添加这个,不然会报Non_ASCII charater错误 python闭包:实际应用场景1.保持闭包运行完后的环境: 2.根据外部作用域的局 ...
- Object-C 设计类接口
在Object-C中,一个类通常分为两部分,.h头文件和.m实现文件. 类的接口(interface)通常存放在类似ClassName.h的文件中.在这里我们定义实例变量和公用(public)方法. ...
- C++专题 - Qt是什么
Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称 ...
- 图像载入 imread()[OpenCV 笔记4]
Mat imread( ); filename 载入的图像名: flags 指定加载图像的颜色类型,默认载入三通道彩色图像, 如果取枚举类型 (OpenCV3中暂时失效),则定义如下 enum{ CV ...