Astronauts UVA - 1391

题意:

有n个人,且给出他们的年龄。这些人的平均年龄是x。

  1. 假如y【i】>= x。那么这个人可以选择 任务 A 或者 任务C
  2. 反之。这个人可以选择 任务 B 或者 任务C
  3. 现在给出这些人的讨厌关系,互相讨厌的人不可以分配到同一个任务。


是否可以分配任务给这n个人。

思路:

  1. 可以先抽象,每个人按照年龄无非就是两种类型 :A∣∣||∣∣C or B∣∣||∣∣C。
  2. 所以可以构造限制条件。

假如两个人互相讨厌,如果是同一种类型。那么要满足 一真一假
p ∨\lor∨ q 和 p‾\overline{p}p​ ∨\lor∨ q‾\overline{q}q​
假如是不同类型,要保证两者都不为C任务即可。
p ∨\lor∨ q

AC

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <stack>
#define For(i,x,y) for(int i=(x); i<=(y); i++)
#define fori(i,x,y)  for(int i=(x); i<(y); i++)
#define pb push_back
#define mst(x,a) memset(x,a,sizeof(x))
#define fzhead EDGE(int _to, int _next)
#define fzbody to(_to), next(_next)
using namespace std;
const int maxn=1e5+10;
const int maxm=1e5+10;
string ans="ABC";
struct EDGE{int to, next;EDGE(){}fzhead:fzbody{}
}e[2*2*maxn];
int head[2*maxn],tot;
bool mark[maxn*2];
stack<int>s;
bool dfs(int x){if(mark[x^1])return false;if(mark[x])return true;mark[x]=true;s.push(x);for(int i=head[x]; i!=-1; i=e[i].next){int v=e[i].to;if(!dfs(v))return false;}return true;
}
void init(){mst(mark,0);mst(head,-1);tot=2;
}
void add(int bg, int to){e[tot]=EDGE(to,head[bg]);head[bg]=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);
}
int n,m;
bool twoset(){for(int i=0; i<2*n; i+=2){if(!mark[i]&&!mark[i+1]){while(!s.empty())s.pop();if(!dfs(i)){while(!s.empty())mark[s.top()]=false,s.pop();if(!dfs(i+1))return false;}}}return true;
}
int x, y[maxn];
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);while(cin>>n>>m,n||m){init();x=0;fori(i,0,n)cin>>y[i],x+=y[i];For(i,1,m){int u,v;cin>>u>>v;u--;v--;int mo1=(n*y[u]>=x)?0:1;int mo2=(n*y[v]>=x)?0:1;add_clause(u,1,v,1);if(mo1==mo2)add_clause(u,0,v,0);}if(twoset()){for(int i=0; i<n; i++){int mo=(n*y[i]>=x)?0:1;if(mo){if(mark[i*2+1])cout<<'B'<<endl;else cout<<'C'<<endl;}else {if(mark[i*2+1])cout<<'A'<<endl;else cout<<'C'<<endl;}}}else cout<<"No solution."<<endl;}return 0;
}//fasdfadsf

Astronauts UVA - 1391(2-sat)相关推荐

  1. [kuangbin]各种各样的题单

    [kuangbin]各种各样的题单 专题1 简单搜索 POJ 1321 POJ 2251 POJ 3278 POJ 3279 POJ 1426 POJ 3126 POJ 3087 POJ 3414 F ...

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

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

  3. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

  4. uva 401.Palindromes

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  5. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  6. UVA 11752 超级幂

    UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & ...

  7. UVa 11174 - Stand in a Line

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  8. UVa 10112 - Myacm Triangles

    UVa第一卷最后一题. 求内部不含点并且面积最大的三角形. 暴力. 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #inclu ...

  9. UVa 10180 - Rope Crisis in Ropeland!

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=41&pa ...

  10. Uva 10074【递推dp】

    UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Larg ...

最新文章

  1. 【Android 安装包优化】WebP 应用 ( Android 中使用 libwebp.so 库解码 WebP 图片 )
  2. python十八:尾调用与递归
  3. (9)跨段跳转,短调用和长调用堆栈图
  4. Jenkins 添加 linux节点
  5. 怎样成为精力管理的高手
  6. 后版权时代——为什么我不看好网易云的音乐社区,而看好腾讯的长音频?
  7. Redis功能强大,那也顶不住被滥用啊!
  8. 我这满目疮痍的2020年
  9. visual studio 2019、2017、2015下载网址
  10. js如何把ajax获取的值返回到上层函数里?
  11. 【神经网络八股扩展】:数据增强
  12. Qt使用教程之创建Qt Quick应用程序(一)
  13. OpenSSH 命令注入漏洞通告(CVE-2020-15778,Openssh <=8.3p1)
  14. 鸿蒙个人用户怎么申请,鸿蒙OS来了,这些机型的用户可以申请
  15. jQuery天猫商品分类导航菜单
  16. 可口可乐造型设计_可口可乐推出黑科技音响,还能当冰箱用?
  17. linux之使用cron,logrotate管理日志文件
  18. 金蝶专业版怎么反过账当月_金蝶KIS专业版没有反过账功能,怎么反过账
  19. 白话深度学习与Tensorflow+白话大数据与机器学习
  20. 新闻/媒体 发布接口定制_每日新闻摘要,19/4/14:老大哥在看

热门文章

  1. 计算机if函数的作用,if函数的使用方法
  2. Java 在Word指定段落/文本位置插入分页符
  3. 2013电商十大新趋势
  4. jquery左侧图片与右侧图片以及放大镜和图片的放大的图片和产品的隐藏的效果
  5. 第一篇:wine介绍
  6. 泽林主办前沿IT技术分享峰会隆重召开,深度探讨人工智能、大数据与物联网 的未来发展趋势
  7. Unity 物体高亮实现
  8. 哪些行业申请网站备案时需要提供前置或专项审批文件?
  9. python字典get用法_详细解析python字典get()实例教程
  10. 跨考计算机无法调剂,考研调剂又出新变化:“不能跨学科门类调剂”!