题意:

  有n个宇航员,按照年龄划分,年龄低于平均年龄的是年轻宇航员,而年龄大于等于平均年龄的是老练的宇航员。

  现在要分配他们去A,B,C三个空间站,其中A站只有老练的宇航员才能去,而B站是只有年轻的才能去,C站都可以去。

  有m对宇航员相互讨厌,不能让他们在同一个空间站工作。

  输出每个宇航员应分配到哪个空间站,如果没有则输出No solution.

分析:

  对于每个宇航员,有两种选择,(A,B)或C。第一个选择中取A还是取B取决于年龄。

  构图,2-SAT找满足题意的方案再输出即可。

代码如下:

  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<cstring>
  4. #define Maxn 100010
  5. #define Maxm 100010
  6.  
  7. int n,m;
  8. int age[Maxn],first[*Maxn],mark[*Maxn],s[*Maxn];
  9. int c,v;
  10.  
  11. struct node
  12. {
  13. int x,y,next;
  14. }t[*Maxm];int len;
  15.  
  16. void ins(int x,int y)
  17. {
  18. t[++len].x=x;t[len].y=y;
  19. t[len].next=first[x];first[x]=len;
  20. }
  21.  
  22. bool dfs(int x)
  23. {
  24. if(mark[x^]) return ;
  25. if(mark[x]) return ;
  26. mark[x]=;
  27. s[++c]=x;
  28. for(int i=first[x];i;i=t[i].next)
  29. if(!dfs(t[i].y)) return ;
  30. return ;
  31. }
  32.  
  33. bool solve()
  34. {
  35. memset(mark,,sizeof(mark));
  36. for(int i=;i<n;i++)
  37. if(!mark[*i]&&!mark[*i+])
  38. {
  39. c=;
  40. if(!dfs(*i))
  41. {
  42. while(c>) mark[s[c--]]=;
  43. if(!dfs(*i+)) return ;
  44. }
  45. }
  46. return ;
  47. }
  48.  
  49. void output()
  50. {
  51. for(int i=;i<n;i++)
  52. if(mark[i*+]) printf("C\n");
  53. else if(age[i]*n>=v) printf("A\n");
  54. else printf("B\n");
  55. }
  56.  
  57. int main()
  58. {
  59. while()
  60. {
  61.  
  62. scanf("%d%d",&n,&m);
  63. len=;v=;
  64. if(n==&&m==) break;
  65. memset(first,,sizeof(first));
  66. for(int i=;i<n;i++) scanf("%d",&age[i]),v+=age[i];
  67. for(int i=;i<=m;i++)
  68. {
  69. int x,y;
  70. scanf("%d%d",&x,&y);x--;y--;
  71. ins(x*+,y*);ins(y*+,x*);
  72. if(!((age[x]*n>=v)^(age[y]*n>=v))) ins(x*,y*+),ins(y*,x*+);
  73. }
  74. if(!solve()) printf("No solution.\n");
  75. else output();
  76. }
  77. return ;
  78. }

[LA3713]

2016-03-18 13:19:17

【UVALive - 3713】Astronauts (2-SAT)的更多相关文章

  1. 【 UVALive - 5095】Transportation(费用流)

    Description There are N cities, and M directed roads connecting them. Now you want to transport K un ...

  2. 【LOJ#6060】Set(线性基)

    [LOJ#6060]Set(线性基) 题面 LOJ 题解 好题啊QwQ. 首先\(x1\oplus x2=s\)是定值.而\(s\)中假设某一位上是\(1\),则\(x1,x2\)上必定有一个是\(1 ...

  3. 【LOJ#6073】距离(主席树)

    [LOJ#6073]距离(主席树) 题面 LOJ 题解 两点间的距离是\(dep[x]+dep[y]-2dep[LCA]\). 那么题目要求的东西拆开维护,唯一不好做的就是\(2dep[LCA]\). ...

  4. 【LOJ#6029】市场(线段树)

    [LOJ#6029]市场(线段树) 题面 LOJ 题解 看着就是一个需要势能分析的线段树. 不难发现就是把第二个整除操作化为减法. 考虑一下什么时候整除操作才能变成减法. 假设两个数为\(a,b\). ...

  5. 【BZOJ3817/UOJ42】Sum(类欧)

    [BZOJ3817/UOJ42]Sum(类欧) 题面 BZOJ UOJ 题解 令\(x=\sqrt r\),那么要求的式子是\[\sum_{d=1}^n(-1)^{[dx]}\] 不难发现,对于每个\ ...

  6. 【UOJ#188】Sanrd(min_25筛)

    [UOJ#188]Sanrd(min_25筛) 题面 UOJ 题解 今天菊开讲的题目.(千古神犇陈菊开,扑通扑通跪下来) 题目要求的就是所有数的次大质因子的和. 这个部分和\(min\_25\)筛中枚 ...

  7. 【POJ 1201】 Intervals(差分约束系统)

    [POJ 1201] Intervals(差分约束系统) 11 1716的升级版 把原本固定的边权改为不固定. Intervals Time Limit: 2000MS   Memory Limit: ...

  8. 【LOJ#573】【LNR#2】单枪匹马(线段树)

    [LOJ#573][LNR#2]单枪匹马(线段树) 题面 LOJ 题解 考虑拿线段树维护这个值,现在的问题就是左右怎么合并,那么就假设最右侧进来的那个分数是\(\frac{x}{y}\)的形式,那么就 ...

  9. 【UVALive - 3487】 Duopoly(网络流-最小割)

    Description The mobile network market in country XYZ used to be dominated by two large corporations, ...

随机推荐

  1. 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 ...

  2. XC文件管理器(Android应用)

    XC文件管理器,是基于Android4.4开发的一个方便易用的文件管理器,具有文件的目录管理和文件的管理,主要包括文件的新建.删除.重命名.复制,移动剪切以及文件详情查看等文件和目录的功能,同时支持文 ...

  3. wiki 使用笔记

    Wiki 安装:Linux(Redhat EL5.3)下安装配置MediaWiki wiki配置: 配置文件:DefaultSettings.php  //权限等配置 左边导航条:/wiki/inde ...

  4. float浮动之后高度自适应失效解决方案

    float浮动之后高度自适应失效解决方案 >>>>>>>>>>>>>>>>>>>> ...

  5. quartz.net 基于数据库的简单实现

    前面简单学习了通过XML配置或者内存指定的方式实现调度任务.但此用法实战用途较小,企业上多需要分布式集群的方式.quart团队也考虑到了这点,于是有了我们今天要学习的.基于数据库实现分布式. Name ...

  6. 基于.net 职责链来实现 插件模式

    插件式的例子 QQ电脑管家,有很多工具列表,点一下工具下载后就可以开始使用了 eclipse ,X Server 等等 插件式的好处 插件降低框架的复杂性,把扩展功能从框架中剥离出来 让第三方有机会来 ...

  7. Python编写相关注意事项

    1.# -*- coding: utf-8 -*-代码首部添加这个,不然会报Non_ASCII charater错误 python闭包:实际应用场景1.保持闭包运行完后的环境: 2.根据外部作用域的局 ...

  8. Object-C 设计类接口

    在Object-C中,一个类通常分为两部分,.h头文件和.m实现文件. 类的接口(interface)通常存放在类似ClassName.h的文件中.在这里我们定义实例变量和公用(public)方法. ...

  9. C++专题 - Qt是什么

    Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊的代码生成扩展(称 ...

  10. 图像载入 imread()[OpenCV 笔记4]

    Mat imread( ); filename 载入的图像名: flags 指定加载图像的颜色类型,默认载入三通道彩色图像, 如果取枚举类型 (OpenCV3中暂时失效),则定义如下 enum{ CV ...