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

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

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 moon of Jupiter.
• Mission C: Landing on Titan, the largest moon of Saturn.
Your task is to assign a crew for each mission. BSA has trained a number of excellent astronauts;
everyone of them can be assigned to any mission. However, if two astronauts hate each other, then it
is not wise to put them on the same mission. Furthermore, Mission A is clearly more prestigious than
Mission B; who would like to go to the second largest moon if there is also a mission to the largest one?
Therefore, the assignments have to be done in such a way that only young, inexperienced astronauts go
to Mission B, and only senior astronauts are assigned to Mission A. An astronaut is considered young
if their age is less than the average age of the astronauts and an astronaut is senior if their age is at
least the averageage. Every astronaut can be assigned to Mission C, regardless of their age (but you
must not assign two astronauts to the same mission if they hate each other).
Input
The input contains several blocks of test cases. Each case begins with a line containing two integers
1 ≤ n ≤ 100000 and 1 ≤ m ≤ 100000. The number n is the number of astronauts. The next n lines
specify the age of the n astronauts; each line contains a single integer number between 0 and 200. The
next m lines contains two integers each, separated by a space. A line containing i and j (1 ≤ i, j ≤ n)
means that the i-th astronaut and the j-th astronaut hate each other.
The input is terminated by a block with n = m = 0.
Output
For each test case, you have to output n lines, each containing a single letter. This letter is either ‘A’,
‘B’, or ‘C’. The i-th line describes which mission the i-th astronaut is assigned to. Astronauts that hate
each other should not be assigned to the same mission, only young astronauts should be assigned to
Mission B and only senior astronauts should be assigned to Mission A. If there is no such assignment,
then output the single line ‘No solution.’ (without quotes).
Sample Input
16 20
21
22
23
24
25
26
27
28
101
102
103
104
105
106
107
108
1 2
3 4
5 6
7 8
9 10
11 12
13 14
15 16
1 10
2 9
3 12
4 11
5 14
6 13
7 16
8 15
1 12
1 13
3 16
6 15
0 0
Sample Output
B
C
C
B
C
B
C
B
A
C
C
A
C
A
C
A

题解

  题意:给出一些宇航员他们的年龄,x是他们的平均年龄,其中A任务只能给年龄大于等于x的人,B任务只能给小于x的人,C任务没有限制。再给出m对人,他们不能同任务。现在要你输出一组符合要求的任务安排。
  以前做过这道题, 但当初完全是套的蓝书上的搜索的模板, 并没有很好地运用对称性的性质, 如今重学2-Sat会了拓扑的做法, 重新来写也算是朝花夕拾了吧…. 发现这种逻辑转化图论问题等理论深化内容十分的好玩…
  如果u, v互相冲突, 并且年龄相同, 那么很显然u选(A, B), v就只能选C, 反之同理. 那么设节点u为u选(A, B), u’为选C. 那么u就像v’连边, v向u’连边.
  同时如果冲突, 那么u选C显然v不能选C, 那么无论年龄相不相同u’得向v连边(代表u选C, v就只能选(A, b)), v’得向u连边.
  然后tarjan缩点成DAG, 顺便判无解. 然后跑一边拓扑即可得解. 注意int和double的比较可能有误差, 最好是int和int的比较.

#include<bits/stdc++.h>
#define clear(a) memset(a, 0, sizeof(a))
using namespace std;
queue<int> q;
const int maxn = 2e6 + 5;
bool flag;
int n, m, nn, num, cnt, top, idx, sum;
int st[maxn], ed[maxn], low[maxn], in[maxn], dfn[maxn];
int s[maxn], age[maxn], rev[maxn], vis[maxn], h[maxn], scc[maxn];
inline const int read() {
    register int x = 0;
    register char ch = getchar();
    while (ch < '0' || ch > '9') ch = getchar();
    while (ch >= '0' && ch <= '9') x = (x << 3) + (x << 1) + ch - '0', ch = getchar();
    return x;
}
struct edge { int nxt, v; }e[maxn << 1];
inline void init() {
    flag = false;
    nn = num = top = idx = cnt = sum = 0;
    clear(in), clear(dfn);
    clear(s),  clear(vis), clear(h), clear(scc);
}
inline void add(int u, int v, int opt) {
    e[++ num].v = v, e[num].nxt = h[u], h[u] = num;
    if (opt) st[num] = u, ed[num] = v;
}
void dfs(int u) {
    s[++ top] = u;
    low[u] = dfn[u] = ++ idx;
    for (int i = h[u]; i; i = e[i].nxt) {
        int v = e[i].v;
        if (!dfn[v]) 
            dfs(v), low[u] = min(low[u], low[v]);
        else if (!scc[v]) low[u] = min(low[u], dfn[v]);
    }
    if (low[u] == dfn[u]) {
        ++ cnt;
        while (s[top + 1] != u) 
            scc[s[top --]] = cnt;
    }
}
void tp() {
    for (int i = 1; i <= cnt; ++ i)
        if (!in[i]) q.push(i);
    while (!q.empty()) {
        int u = q.front();q.pop();
        if (vis[u]) continue;
        vis[u] = 2, vis[rev[u]] = 1;
        for (int i = h[u]; i; i = e[i].nxt)
            if (!(-- in[e[i].v]))
                q.push(e[i].v);
    }
}
int main() {
    register int i;
    while (n = read() , m = read(), n || m) {
        init();
        for (i = 1; i <= n; ++ i) age[i] = read(), sum += age[i];
        for (i = 1; i <= m; ++ i) {
            int u = read(), v = read();
            if (u == v) continue;
            add(2 * u + 1, 2 * v, 1), add(2 * v + 1, 2 * u, 1);
            if (age[u] * n < sum && age[v] * n < sum || 
                age[u] * n >= sum && age[v] * n >= sum)
            add(2 * u, 2 * v + 1, 1), add(2 * v, 2 * u + 1, 1);
        }
        for (i = 2; i <= 2 * n + 1; ++ i)
            if (!dfn[i]) dfs(i);
        for (i = 1; i <= n; ++ i)
            if (scc[2 * i] == scc[2 * i + 1]) {
                flag = true;
                puts("No Solution");
                break;
            }
        if (flag) continue;
        clear(h), nn = num, num = 0;
        for (i = 1; i <= nn; ++ i)
            if (scc[st[i]] != scc[ed[i]])
                add(scc[st[i]], scc[ed[i]], 0), in[scc[ed[i]]] ++;
        for (i = 1; i <= n; ++ i)
            rev[scc[2 * i]] = scc[2 * i + 1], rev[scc[2 * i + 1]] = scc[2 * i];
        tp();
        for (i = 1; i <= n; ++ i) {
            if (vis[scc[2 * i]] == 2) puts("C");
            else if (age[i] * n < sum) puts("B");
            else puts("A");
        }
    }
}
ConvNeXt 改进 :ConvNeXt添加GnConv递归门控卷积,二次创新CNBlock结构 ,独家首发 视觉 Transformer 在多种任务中取得了显著的成功,这得益于基于点积自注意力的新空间建模机制。视觉 Transformer 中的关键因素——即输入自适应、长距离和高阶空间交互——也可以通过卷积框架高效实现。作者提出了递归门控卷积(Recursive Gated Convolution,简称 gnConv),通过门控卷积和递归设计执行高阶空间交互。该新操作具有高度的灵活性和可定制性,兼容各种卷积变体,并将自注意力中的二阶交互扩展到任意阶数,而不会引入显著的额外计算。 阅读详情

相关推荐

3GPP协议解读_物理层系列(一)_物理层协议怎么看?

5G NR相关协议一般都在38系列,点进去以后可以看到,38.2xx系列为物理层相关协议,为了掌握物理层相关知识,应该怎么看协议呢?我建议从38.201读起,对38.2xx系列协议有一个整体的把握。

JCMLSY的博客 1327

UVA1391【LA3713】 经典2-SAT

题意:给出一些宇航员他们的年龄,x是他们的平均年龄,其中A任务只能给年龄大于等于x的人,B任务只能给小于x的人,C任务没有限制。再给出m对人,他们不能同任务。现在要你输出一组符合要求的任务安排。这道题是刘汝佳蓝书上讲了的题,在这里套用他的模板,实在是好用啊…#include<stdio.h> #include<vector> #include<cstring> using namespace std

Le Petit Prince 485

保姆级教程:在RK3588平台上为IMX415 Sensor配置HDR2曝光(附完整代码与避坑点)

本文提供RK3588平台上为IMX415 Sensor配置HDR2曝光的详细教程,涵盖基础概念、限制条件、实战配置步骤及常见问题解决方案。通过完整代码示例和关键参数解析,帮助开发者高效实现HDR2曝光模式,提升图像质量并避开常见陷阱。

weixin_28685287的博客 283

UVA 1391 Astronauts 2-sat

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

ACMmaxx的专栏 880

深入博通PEX89000内部:那颗ARM CPU和Synthetic Mode到底能玩出什么花样?

本文深入解析博通PEX89000系列PCIe交换芯片内置的ARM CPU与Synthetic Mode技术,揭示其在AI计算和数据中心的智能潜能。通过ARM Cortex CPU的实时控制和Synthetic Mode的自治网络功能,PEX89000实现了GPU集群的动态拓扑重组和资源池化,大幅提升AI训练效率。文章还探讨了该技术在软件定义数据平面和弹性AI架构中的创新应用。

weixin_30776273的博客 209

WSL2迁移后用户名不见了?一招教你快速恢复Ubuntu22.04默认用户

本文针对WSL2迁移后Ubuntu 22.04默认用户名丢失的常见问题,提供了详细的诊断与修复方案。通过分析迁移底层逻辑,指导用户使用`ubuntu2204.exe config --default-user`命令或配置`/etc/wsl.conf`文件快速恢复用户身份,并涵盖权限修复、冲突解决及自动化迁移脚本等进阶内容,确保子系统迁移后环境完整可用。

web39explorer的博客 555

uva 1391(2-SAT)

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

weixin_34177064的博客 179

Allegro如何输出ODB文件操作指导

在PCB设计完成之后,需要输出生产文件用于生产加工,除了gerber文件可以用生产制造,ODB文件同样也可以用于生产,如下图。用Allegro如何输出ODB文件,具体操作如下。如何输出ODB文件操作指导。

weixin_54787054的博客 7202

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

等保测评-达梦数据库

一般适用于等保测评

m0_54146694的博客 1297

管理类联考——逻辑——真题篇——按知识分类——综合推理

29、某部门抽检了肉制品、白酒、乳制品、干果、蔬菜、水产品、饮料等﹖类商品共521种样品,发现其中合格样品515种,不合格样品6种。已知: (1)蔬菜、白酒中有2种不合格样品。 (2)肉制品、白酒、蔬菜、水产品中有5种不合格样品。 (3)蔬菜、乳制品、干果中有3种不合格样品。 根据上述信息,可以得出以下哪项? A. 乳制品中没有不合格样品。 B. 肉制品中没有不合格样品。 C. 蔬菜中没有不合格样品。 D. 白酒中没有不合格样品。 E. 水产品中没有不合格样品。 31~32题基于以下题干: 某中学举行田径运

stqer的博客 2014

【2-sat】uva1391

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

huyuncong的专栏 888

DICOM标准:DICOM医学影像中的覆盖层(Overlay)概念详解

DICOM标准:深入详解DICOM医学影像中的覆盖层(Overlay)

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1561

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[Codeforces]696D Legen... AC自动机 + 矩阵快速幂

D. Legen... time limit per test 6 seconds memory limit per test 256 megabytes input standard input output standard output Barney was hanging out with Nora for a while an

Le Petit Prince 1045

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[BZOJ]2219 数论之神 离散对数 + 原根

2219: 数论之神Time Limit: 3 Sec Memory Limit: 259 MB Submit: 1052 Solved: 322 [Submit][Status][Discuss] Description在ACM_DIY群中,有一位叫做“傻崽”的同学由于在数论方面造诣很高,被称为数轮之神!对于任何数论问题,他都能瞬间秒杀!一天他在群里面问了一个神题: 对于给定的3个非负整

Le Petit Prince 973

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[BZOJ]2427 软件安装 O(nm)树形背包

2427: [HAOI2010]软件安装 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1913  Solved: 757 [Submit][Status][Discuss] Description 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi。我们希望从中选择一些软件安装到一台磁盘容量为M计算机

Le Petit Prince 940

[BZOJ]4709 柠檬 DP单调性优化 + 单调栈

4709: [Jsoi2011]柠檬 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 252  Solved: 111 [Submit][Status][Discuss] Description Flute 很喜欢柠檬。它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬。贝壳一共有 N (1 ≤ N  ≤ 100,000)

Le Petit Prince 910

[BZOJ]3159 决战 LCT&Splay

3159: 决战 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 420  Solved: 183 [Submit][Status][Discuss] Description Input 第一行有三个整数N、M和R,分别表示树的节点数、指令和询问总数,以及X国的据点。 接下来N-1行,每行两个整数X和Y,表示Kat

Le Petit Prince 876

[BZOJ]4555 [TJOI2016&HEOI2016] 求和 第二类斯特林数 + NTT

4555: [Tjoi2016&Heoi2016]求和 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 525  Solved: 418 [Submit][Status][Discuss] Description 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心。 现在他想计算这样一个函数的值: S(i, j)表示第二

Le Petit Prince 849

[BZOJ]2179 FFT快速傅立叶 FFT模板

2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 3709  Solved: 1970 [Submit][Status][Discuss] Description 给出两个n位10进制整数x和y,你需要计算x*y。 Input 第一行一个正整数n。 第二行描述一个位数为n的正整数x。 第三行描述一个

Le Petit Prince 813

[BZOJ]4570 [SCOI2016] 妖怪 凸包 + 双钩函数求最值

4570: [Scoi2016]妖怪 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 1025  Solved: 288 [Submit][Status][Discuss] Description 邱老师是妖怪爱好者,他有n只妖怪,每只妖怪有攻击力atk和防御力dnf两种属性。邱老师立志成为妖怪大师,于 是他从真新镇出发,踏上未知的旅

Le Petit Prince 711

[BZOJ]3489 A simple rmq problem 主席树套树

3489: A simple rmq problemTime Limit: 40 Sec Memory Limit: 600 MB Submit: 2074 Solved: 708 [Submit][Status][Discuss] Description因为是OJ上的题,就简单点好了。给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一次的数,并且要求找的

Le Petit Prince 668

[BZOJ]2648 SJY摆棋子 KD-Tree

2648: SJY摆棋子 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 5049  Solved: 1762 [Submit][Status][Discuss] Description 这天,SJY显得无聊。在家自己玩。在一个棋盘上,有N个黑色棋子。他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离

Le Petit Prince 656

[51NOD]1288 序列求和 V4 拉格朗日插值法

就是让你求自然数幂之和嘛... 我们发现指数很小但是n很大. 本来这个东西用第一类斯特林数来搞简直极品, 因为模数都可以不是质数... 但是这道题k是万级别的, O(k ^ 2)过不了, 但是这样伯努利数不是也过不了吗? 不过好像可以NTT搞事情.   不过我们用拉格朗日插值法可以做到O(k), 因为这个和他实际上是一个k+1项多项式, 那我们插1 ~ k +2个值进去, 得到了拉格朗日插值式,

Le Petit Prince 649

[BZOJ]1814 Ural 1519 Formula 1 插头DP

1814: Ural 1519 Formula 1 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 879  Solved: 328 [Submit][Status][Discuss] Description Regardless of the fact, that Vologda could not get rights to hold

Le Petit Prince 644
上一篇: [HDU]2295 Radar 跳舞链 重复覆盖
下一篇: [BZOJ]2178 圆的面积并 Simpson积分
MaxMercer
博客等级 码龄10年 55粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值