UVA1391【LA3713】 经典2-SAT

【UVa1391】宇航员分组Astronauts【2-SAT】【强连通分量】 大意:有n个宇航员,按照年龄划分,年龄低于平均年龄的是年轻宇航员,而年龄大于等于平均年龄的是老练的宇航员。 现在要分配他们去A,B,C三个空间站,其中A站只有老练的宇航员才能去,而B站是只有年轻的才能去,C站都可以去。 有m对宇航员相互讨厌,不能让他们在同一个空间站工作。 输出每个宇航员应分配到哪个空间站,如果没有则输出No solution.这道题只要构出图来就很好办啦~~ 由于每个宇航员 阅读详情

题意:给出一些宇航员他们的年龄,x是他们的平均年龄,其中A任务只能给年龄大于等于x的人,B任务只能给小于x的人,C任务没有限制。再给出m对人,他们不能同任务。现在要你输出一组符合要求的任务安排。

这道题是刘汝佳蓝书上讲了的题,在这里套用他的模板,实在是好用啊…

#include<stdio.h>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=100005;
double sum,ave;
int age[maxn],u,v,n,m;
inline int read(){
    register int x=0,f=1;
    register char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f*=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    return f*x;
}
struct SAT{
    int n;
    vector<int> G[maxn*2];
    bool mark[maxn*2];
    int s[maxn*2],c;
    bool dfs(int x){
        if(mark[x^1]) return false;
        if(mark[x]) return true;
        mark[x]=true;
        s[c++]=x;
        for(int i=0;i<G[x].size();i++)
         if(!dfs(G[x][i])) return false;
        return true;
    }
    void init(int n){
        this->n=n;
        for(int i=0;i<n*2;i++) G[i].clear();
        memset(mark,false,sizeof(mark));
    }
    void add(int x,int xval,int y,int yval){
        x=x*2+xval;
        y=y*2+yval;
        G[x^1].push_back(y);
        G[y^1].push_back(x);
    }
    bool solve(){
        for(int i=0;i<n*2;i=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;
    }

};
SAT Mercer;
int main(){
    while(n=read(),m=read(),n||m){
       Mercer.init(n);sum=0;
       for(register int i=0;i<n;i++) age[i]=read(),sum+=age[i];
       ave=sum/n;
       for(register int i=0;i<m;i++){
           u=read(),v=read();
           u--,v--;
           if((age[u]<ave&&age[v]<ave)||(age[u]>=ave&&age[v]>=ave)){
              Mercer.add(u,0,v,0);
              Mercer.add(u,1,v,1);
           }
           else Mercer.add(u,1,v,1);
       }
       if(!Mercer.solve()) puts("No solution.");
       else{
          for(int i=0;i<2*n;i=i+2){
              if(Mercer.mark[i])
               puts("C");
               else printf("%c\n",age[i/2]>=ave?'A':'B');
          }
       }
    }
    return 0;
}
ros2笔记-4.6使用launch启动脚本 ros2 4.6 使用launch启动多节点 阅读详情

相关推荐

神经网络(十五)在VS Code下搭建PyTorch环境

pytorch在vscode中的配置和使用

就随便写写.... 5万+

UVA 1391 Astronauts 2-sat

题目大意: 有n个宇航员,按照年龄划分,年龄低于平均年龄的是年轻宇航员,而年龄大于等于平均年龄的是老练的宇航员。 现在要分配他们去A,B,C三个空间站,其中A站只有老练的宇航员才能去,而B站是只有年轻的才能去,C站都可以去。 有m对宇航员相互讨厌,不能让他们在同一个空间站工作。 输出每个宇航员应分配到哪个空间站,如果没有则输出No solution.

ACMmaxx的专栏 880

Python气象数据处理实战:用PyCINRAD轻松绘制雷达PPI图像(附避坑指南)

本文详细介绍了如何使用Python库PyCINRAD处理中国CINRAD系列天气雷达的基数据,并绘制专业的PPI图像。内容涵盖从环境配置、数据读取、核心绘图到高级定制与批量处理的完整流程,并针对安装依赖、中文乱码、数据范围等常见问题提供了实用的避坑指南,帮助气象工作者高效完成雷达数据可视化。

dog123的博客 221

[UVA]1391 Astronauts 2-Sat 朝花夕拾

The Bandulu Space Agency (BSA) has plans for the following three space missions: • Mission A: Landing on Ganymede, the largest moon of Jupiter. • Mission B: Landing on Callisto, the second largest mo

Le Petit Prince 434

成本会计(第九版)王忠孝课后习题答案解析

在掌握了基础知识之后,我们还需要培养自己的实际操作能力。此外,在学习过程中,遇到困难时,要及时向老师、同学请教,不要害怕暴露自己的不足。三人行,必有我师,每个人都有值得学习的地方。首先,我们需要认真阅读教材,把基础知识掌握牢固。在这里,我建议大家使用《成本会计(第九版)》的配套练习册,这样可以帮助我们检查学习效果。同时,网上的一些优质课程和论坛也是不错的学习资源,例如网易云课堂、中国大学MOOC等。别担心,这里我给大家推荐一些实用的学习资料和方法,帮助你更好地掌握这门课程。出版社: 大连理工大学出版社。

weixin_58833001的博客 1887

手把手教你用SAM模型实现精准图像分割:从环境配置到实战应用

本文详细介绍了如何使用Meta推出的Segment Anything Model(SAM)实现精准图像分割,从环境配置到实战应用的全流程。特别针对电商场景中的商品分割需求,提供了硬件配置、模型下载、API使用及优化策略等实用指南,帮助开发者快速掌握这一强大的深度学习工具。

pepsi的博客 1060

uva1391Astronauts【2-SAT】

又是刘汝佳书上的题,貌似书上只有这两个了,确实2-SAT的题也没有太多,看邝斌的分类也才九个,今天加明天上午再A两个就结束~ 做这个题的时候发现自己对于结点的表示还是不够理解,遂把四种情况都列出来 xi为假 或xj为假 2*i+1==>2*j 2*j+1==>2*i xi为真或xj为真 2*i==>2*j+1 2*j==>2*i+1 xi为假或x

MissZhou要努力 625

微信公众号数据采集实战:历史文章、互动数据与评论详情全解析

本文提供了一套完整的微信公众号数据采集实战方案,详细解析了如何通过接口调用获取公众号的历史文章列表、单篇文章的互动数据以及详细的用户评论。文章从环境准备、核心参数解析到分页逻辑、批量处理和异常处理,提供了可运行的Python代码示例,旨在帮助开发者高效、稳定地构建自动化采集工具,用于竞品分析、内容研究和舆情监控。

u5v6w7的博客 1593

uva 1391 - Astronauts(2sat)

题目链接:uva 1391 - Astronauts #include #include #include #include #include using namespace std; const int maxn = 100005; struct TwoSAT { int n; bool mark[maxn * 2]; vector G[maxn * 2]; in

不慌不忙、不急不躁 935

基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)

一、环境介绍 小车主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 手机APP: 采用QT设计,程序支持跨平台编译运行(Android、IOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解) 硬件包含: 淘宝购买的完整一套4轮遥控小车(采用STM32F103ZET6作为主控板)、DHT11温湿度传感器、中科微GPS模块、ESP8266 ...

6万+

SQL中的时间计算:员工每日工作时长

摘要:本文介绍了一个使用SQL查询计算员工每日工作时长的实用方法。通过分析包含员工打卡记录的数据库表,利用CTE(公共表表达式)将日期分组,计算最早和最晚打卡时间差,最终以"小时:分钟"格式输出工作时长。该方法适用于每日两次打卡的场景,并提示了处理漏打卡等特殊情况时的注意事项,为企业考勤管理提供了有效的数据支持方案。(148字)

m0_74337424的博客 411

UVA1391、LA3713【astronauts...】【2 -SAT】

这题一开始自己想到了3-SAT。。。 照着敲了个试试,好像不太对。。     深入的3-SAT不会,有点囧 然后就积极往2-SAT上想 想分开小于ave和大于等于ave的两部分各自2-SAT不能考虑某些情况,显然。。。 于是呵呵了。。   正解是分开讨论。       如果a和b都小于ave或都是大于等于ave的            或一个小于ave一个大于ave。。        

Beyyes 1050

利用XGBoost实现短期电力负荷预测

本数据集为某地区2009年-2015年的用电负荷,时间片为每分钟这里我们定义了XGB模型作为实例,来进行模型训练,之后我们会对其使用网格搜索找到最优的参数。

优快云 精品推荐 4494

Uva 1391 (LA 3713) Astronauts (2-SAT问题)

今天学了2-SAT问题,就找了这道例题,敲了一下,还好过了。 2-SAT问题应该是把一些布尔变量之间的逻辑关系反映到一个无向图(有时可能是有向图)上来。通过推导的形式(即已经明确不符合题意的两个变量之间的逻辑关系,通过确定其中一个变量的值,来推导出另一变量的值)在这个有向图里面补边。再通过确定一些变量的值,使所有的变量都能符合题意中逻辑关系。补边方式 即如果Xi = true &am...

weixin_30345055的博客 134

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Uva1 1391/LA 3713 - Astronauts 构图2-sat...更正了toposort过程...

Program: #include #include #include #include #include #include #include #include #include #define oo 1000000007 #define MAXN 100005<<1 #define MAXM 100000<<2 #define ll long long using namespace std;

zzyzzy12 1076

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【2-sat】uva1391

输出方案采用了刘大师的写法,直接给每个强连通分量标号,每个点只要选较小

huyuncong的专栏 888

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

uva 1391(2-SAT)

题意:有A,B,C三种任务分配给n个宇航员,没个宇航员分配一个任务,只有年龄大于等于平均年龄的宇航员才能分配任务A,年龄小于平均年龄的宇航员才能分配任务B。所有宇航员都能分配任务C。由于有一些宇航员之间存在矛盾所以不能分配同一种任务。现在让你来分配,如果有输出分配情况。 思路:这一看这道题对于没个宇航员有三种状态,但在想一下便可发现对于一个宇航员来说年龄是唯一的,所以A,B中只能选一个。这样一来...

weixin_34177064的博客 179

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

虽然题目里有A、B、C三种状态,但是每个人只有两个状态可以选择,显然是一道2-SAT; 建图的话,假设选择A(或者B)为i+n,选择C为i;首先当两个人讨厌时,一个人选C,则另一个一定选另一个,连两条边(x,y+n)和(y,x+n),同时若是两个人同类,则还需加上限制使两个人不能同时选A(或同时选B),就再连两条边(x+n,y),(y+n,x);最后跑一边tarjan 输出答案的话就不需要在跑一边拓扑排序了,因为在tarjan时强连通分量被染色的顺序就是拓扑序,所以若col(i)<col(i+n),.

繁凡さん的博客 554

uva1391-Astronauts

宇航员执行任务,有三个任务ABC。把宇航员按照平均年龄分成新老两组,老宇航员可以去AC,新宇航员可以取BC。宇航员之间有不能共存关系,问是否有合法的分配方案。 分析 虽然有三个任务,但每个宇航员还是只有两种选择。我们把宇航员当成变量,那么老宇航员True代表选择任务A,False代表任务C,新宇航员True代表任务B,False代表任务C。这样我们依然可以分别对两老,两新,一老一新的情况...

dengtan9179的博客 171

UVA 1391 2-SAT

UVA 1391 题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=38529 题意: n个人,年龄在均值以下的去A或C,以上去B或C。 有m中仇恨方式,问一种合理的方案并输出。 思路: 2-SAT 我没有看题解哦 我没有看题解哦 我没有看题解哦 我没有看题解哦~ 刚开始想怎么去处理三种状态,

beihai2013 398

UVA 1391 Astronauts(2-SAT)

这题其实算是一题水题,但是一开始想错了,一直把每位宇航员的选择分为A和B了,其实应该分成的是C和!C,这样分,很容易就想出来怎么写了。#include #include #include #include #include using namespace std; const int maxn=100000+5; struct TwoSAT{ int n; vector G[max

qq_33901573的博客 341

UVA1391 Astronauts

每个宇航员只能根据年龄情况,分配A,B中的一个任务,和C任务。 考虑两个有矛盾的宇航员: 1.如果他们在不同年龄区段,那么他们只要不同时在C即可。(即,若其中一人在C,另一个必须在A或B) 2.如果他们在同一年龄区段,那么,当其中一人在A或B时,另一人必须去C。多了两个限制条件。 #include <bits/stdc++.h> using namespace std; const int N=1e5+5; int n,m,x,y,sum,a[N]; int now,top,col,dfn[N*

Love_xyh的博客 245

UVA 1391 - Astronauts(2-SET)

UVA 1391 - Astronauts 题目链接 题意:给定一些宇航员,年龄小于平均数能做A和C,大于等于能做B和C,现在知道一些宇航员互相憎恨,不能让他们做同一个任务,问一直种安排方法满足条件 思路:2set问题,如果两种宇航员类型相同,就两个宇航员做不一样,加一条真或真,和假或假的边,如果类型不同,就加一条真或真的边 代码: #include #includ

Remilia's 1279

关于平面图到对偶图的转化

闲话哇对偶图真的是个好东西, 昨天考NOI2010的时候前两道很快做完了, 看着t3发呆了1个多小时, 啥也想不出来. 看着网格图突然想到听说bzoj1001狼抓兔子可以用对偶图求解. 对偶图是啥我也不知道, 听说把面看成点, 连边后跑一边最短路就可以了. 但是当时想到这个突然发现自己不会建对偶图, 看时间还有一个多小时, 于是建了8种可能的图, 每一个都跑一遍spfa, 发现有一个可以过样例, 手

Le Petit Prince 1万+

对偶图对于平面图最小割的求解(网络流问题)

前言对于平面图和对偶图, 和两者之间的转化, 如果有不明白的:ClickHere.对偶图的求解这是一个s-t平面图. 所谓s-t平面图, 就是一个平面图里有s源点和t汇点. 对于这个图, 我们做一点转化方便求解.这样就多了一个附加面(1 - 4 - 7 - 8 - 1). 我们知道平面图转化为对偶图之后, 对偶图里的点, 对应的是平面图里的面. 我们把刚刚的附加面设为对偶图里的s*, 无界面的点设

Le Petit Prince 2985

二分图的最小顶点覆盖 和 最大独立集 和 最大团

最小顶点覆盖概念: 如果称选了一个点的话, 就覆盖了所有与这点相连的边. 现在要选出最小的点, 来覆盖二分图中所有边.结论: 最小顶点覆盖 = 二分图最大匹配. 证明: Click最大独立集概念: 选出一些点, 使两两之间没有边, 包含顶点数最多的集合称之为最大独立集.结论: 所有顶点数-最小顶点覆盖. 证明: 因为最小顶点覆盖后。 剩下没匹配的点, 相互之间一定没有边, 否则就可以相连多一条

Le Petit Prince 1653
上一篇: [POJ]2942 圆桌骑士 点双连通分量 + 二分图染色
下一篇: Codeforces 808F Card Game
MaxMercer
博客等级 码龄10年 55粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值