给个题目链接:

https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1714

显然每个人只有两种选择:C或者A/B。而且后一种只和这个人的年龄有关。

这就是一个很显然的2-SAT模型了,显然有矛盾的不能都选C,如果两个人的年龄段还一样,那就更悲剧了,也不能同时选A/B。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<vector>
#include<cstring>
#define pb push_back
#define ll long long
#define maxn 200005
#define M(x) memset(x,0,sizeof(x))
using namespace std;
int n,m;
struct TOW_SAT{
vector<int> g[maxn];
int tp[maxn],age[maxn];
int tot,node[maxn],num;
bool mark[maxn<<1|1]; inline void init(){
for(int i=(n<<1)-1;i>=0;i--) g[i].clear();
M(tp),M(age);
M(mark);
tot=num=0;
} inline void add(int x,int y){
int Cx=x<<1,Ax=Cx+1;
int Cy=y<<1,Ay=Cy+1; g[Cx].pb(Ay),g[Cy].pb(Ax);
if(tp[x]==tp[y]){
g[Ax].pb(Cy);
g[Ay].pb(Cx);
}
} bool dfs(int x){
if(mark[x^1]) return 0;
if(mark[x]) return 1;
mark[x]=1,node[++num]=x; for(int i=g[x].size()-1;i>=0;i--)
if(!(dfs(g[x][i]))) return 0; return 1;
} inline bool work(){
int cl=n<<1;
for(int i=0;i<cl;i+=2) if(!mark[i]&&!mark[i+1]){
num=0;
if(!dfs(i)){
while(num) mark[node[num--]]=0;
if(!dfs(i+1)) return 0;
}
} return 1;
} inline void solve(){
init();
for(int i=0;i<n;i++){
scanf("%d",age+i);
tot+=age[i];
} for(int i=0;i<n;i++) if(age[i]*n>=tot) tp[i]=1; int uu,vv;
for(int i=1;i<=m;i++){
scanf("%d%d",&uu,&vv);
uu--,vv--,add(uu,vv);
} if(!work()) puts("No solution");
else{
for(int i=0;i<n;i++){
if(mark[i<<1]) puts("C");
else if(tp[i]) puts("A");
else puts("B");
}
}
}
}mine; int main(){
while(scanf("%d%d",&n,&m)==2&&n&&m) mine.solve();
return 0;
}

  

LA 3713 Astronauts的更多相关文章

  1. UVALive - 3713 - Astronauts(图论——2-SAT)

    Problem   UVALive - 3713 - Astronauts Time Limit: 3000 mSec Problem Description Input The input cont ...

  2. LA 3713

    The Bandulu Space Agency (BSA) has plans for the following three space missions: Mission A: Landing ...

  3. UVA 3713 Astronauts

    The Bandulu Space Agency (BSA) has plans for the following three space missions: • Mission A: Landin ...

  4. LA 3713 宇航员分组

    题目链接:http://vjudge.net/contest/142615#problem/B 题意:有A,B,C三个人物要分配个N个宇航员,每个宇航员恰好要分配一个任务,设平均年龄为X,只有年龄大于 ...

  5. UVALive 3713 Astronauts (2-SAT,变形)

    题意: 有A,B,C三种任务,每个人必获得1个任务,大于等于平均年龄的可以选择A和C,小于平均年龄的可以选择B和C.这些人有一些是互相讨厌的,必须不能执行同任务,问能否安排他们工作?若行,输出任意一组 ...

  6. UVALive - 3713 Astronauts

    给定n个宇航员的年龄,平均年龄为 ave,根据下列要求分配任务: B任务只能分配给年龄<ave的宇航员: A任务只能分配给年龄>=ave的宇航员: C任务可以任意分配. 给定m组互相憎恨的 ...

  7. UVA Live 3713 Astronauts (2-SAT)

    用布尔变量表示状态,把限制条件转化为XνY的形式以后跑2SAT,根据变量取值输出方案. #include<bits/stdc++.h> using namespace std; ; #de ...

  8. 图论$\cdot$2-SAT问题

    2-SAT问题是这样的:有$n$个布尔变量$x_i$,另有$m$个需要满足的条件,每个条件的形式都是“$x_i$为真/假或者$x_j$为真/假”.比如:"$x_1$为真或者$x_3$为假“. ...

  9. 2-SAT 问题与解法小结

    2-SAT 问题与解法小结 这个算法十分的奇妙qwq... 将一类判定问题转换为图论问题,然后就很容易解决了. 本文有一些地方摘录了一下赵爽<2-SAT解法浅析> (侵删) 一些概念: \ ...

随机推荐

  1. 抓包工具 - Fiddler - (三)

    <转载自 miantest> 我们知道Fiddler是位于客户端和服务器之间的代理,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调 ...

  2. [译]9-spring bean的生命周期

    spring中bean的生命周期比较容易理解.bean在实例化之后有时需要调用某个初始化方法进行一些初始化的工作.同样的 ,当bean在销毁之前有时需要做一些资源回收的工作. 尽管bean在实例化和销 ...

  3. 手机App测试如何获取包名的入口【两种方式】

    在进行手机APP测试的时候经常要获取包名.那么何为包名呢?简单来说其实就是手机APP的安装apk文件的名称,每个手机APP(软件)的包名都是唯一的. 那么我们怎样来获取包名以及包名的入口呢? 方法一: ...

  4. hdu2010(dfs+剪枝)

    Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...

  5. BZOJ5301 [Cqoi2018]异或序列 【莫队】

    题目链接 BZOJ5301 题解 莫队水题 BZOJ400AC纪念 #include<algorithm> #include<iostream> #include<cst ...

  6. BZOJ3876 [Ahoi2014&Jsoi2014]支线剧情 【有上下界费用流】

    题目 [故事背景] 宅男JYY非常喜欢玩RPG游戏,比如仙剑,轩辕剑等等.不过JYY喜欢的并不是战斗场景,而是类似电视剧一般的充满恩怨情仇的剧情.这些游戏往往 都有很多的支线剧情,现在JYY想花费最少 ...

  7. POJ3984 BFS广搜--入门题

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20816   Accepted: 12193 Descriptio ...

  8. 洛谷 P1463 [SDOI2005]反素数ant && codevs2912反素数

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...

  9. .net 网站首页,本次的项目中用到的一个网站首页中统计网页访问量的工具方法,我觉得它应该在pagebase里面,拿来用一下

    需要建立一个根文件夹 ~/xml/couter.txt #region 网站访问量         protected void pageviews() {             int count ...

  10. median(NOIP模拟赛Round 3)

    也是神奇的题目.. 原题传送门 首先看到这道题目,很明显我们需要线性算法 1.前缀和+统计 2.DP+统计 对于第一种算法,我们可以对于任何一个a[i]对b进行比较,如果大于b标上1,等于b标上0,小 ...