2023NOIP A层联测25-滈葕

给定一个 01 权有向图,给每个点赋予 ABCD 中的一个字母使得每条有向边 ( u , v , w ) (u,v,w) (u,v,w) 都满足 w = 1 ⟺ ( a u , a v ) ∈ { ( A , B ) , ( A , D ) , ( B , A ) , ( B , D ) , ( C , A ) , ( C , B ) , ( C , D ) } w=1\Longleftrightarrow(a_u,a_v)\in\{(A,B),(A,D),(B,A),(B,D),(C,A),(C,B),(C,D)\} w=1(au,av){(A,B),(A,D),(B,A),(B,D),(C,A),(C,B),(C,D)}


放一段题解的话

ABO 血型系统是血型系统的一种,把血液分为 A,B,AB,O 四种血型。血液由红细胞和血清等组成,红细胞表面
有凝集原,血清内有凝集素。根据红细胞表面有无凝集原 A 和 B 来划分血液类型。红细胞上只有凝集原 A 的
为 A 型血,其血清中有抗 B 凝集素;红细胞上只有凝集原 B 的为 B 型血,其血清中有抗 A 凝集素;红细胞上
两种凝集原都有的为 AB 型血,其血清中无凝集素;红细胞上两种凝集原皆无者为 O 型,其血清中两种凝集素
皆有。有凝集原 A 的红细胞可被抗 A 凝集素凝集;有凝集原 B 的红细胞可被抗 B 凝集素凝集。配血试验是两
个人分别提供红细胞和血清并将其混合,观察是否有凝集反应。

可以发现,ABCD 的属性分别表示 A,B,AB,O 型血,一条边表示一次配血试验,边权为 1 1 1 代表有凝集反应。

a i , b i a_i,b_i ai,bi 分别表示第 i i i 个人是否有凝集原 A,B,则对于出点 x x x 和入点 y y y,凝结原 A 和抗 A 凝集素相遇的条件是 a x ∧ ¬ a y a_x\land\neg a_y ax¬ay,凝结原 B 和抗 B 凝集素相遇的条件是 b x ∧ ¬ b y b_x\land\neg b _y bx¬by,即凝集反应的条件是 ( a x ∧ ¬ a y ) ∨ ( b x ∧ ¬ b y ) (a_x\land\neg a_y)\lor(b_x\land\neg b _y) (ax¬ay)(bx¬by)

对于 w = 1 w=1 w=1,要满足 ( a x ∧ ¬ a y ) ∨ ( b x ∧ ¬ b y ) = ( a x ∨ b x ) ∧ ( a x ∨ ¬ b y ) ∧ ( ¬ a y ∨ b x ) ∧ ( ¬ a y ∨ ¬ b y ) (a_x\land\neg a_y)\lor(b_x\land\neg b _y)=(a_x\lor b_x)\land(a_x\lor\neg b_y)\land(\neg a_y\lor b_x)\land(\neg a_y\lor \neg b_y) (ax¬ay)(bx¬by)=(axbx)(ax¬by)(¬aybx)(¬ay¬by)

对于 w = 0 w=0 w=0,要满足 ¬ ( ( a x ∧ ¬ a y ) ∨ ( b x ∧ ¬ b y ) ) = ( ¬ a x ∨ a y ) ∧ ( ¬ b x ∨ b y ) \neg((a_x\land\neg a_y)\lor(b_x\land\neg b _y))=(\neg a_x\lor a_y)\land(\neg b_x\lor b_y) ¬((ax¬ay)(bx¬by))=(¬axay)(¬bxby)

发现这两种情况的式子都是 2-sat 的形式,直接做就行了。时间复杂度 O ( n + m ) O(n+m) O(n+m)

代码如下:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+1,M=8e6+1;
int n,m,dfn[N<<2],low[N<<2],instack[N<<2],num,cnt1;
int head[N<<2],nxt[M],to[M],cnt,belong[N<<2];
vector<int> s,t[N<<2];
void add(int u,int v)
{to[++cnt]=v;nxt[cnt]=head[u];head[u]=cnt;
}
void dfs(int u)
{dfn[u]=low[u]=++num;s.push_back(u);instack[u]=1;for(int i=head[u];i;i=nxt[i]){if(!dfn[to[i]]){dfs(to[i]);low[u]=min(low[u],low[to[i]]);}else if(instack[to[i]]) low[u]=min(low[u],dfn[to[i]]);}if(dfn[u]==low[u]){++cnt1;int now=0;while(now!=u){now=s.back();t[cnt1].push_back(now);instack[now]=0;belong[now]=cnt1;s.pop_back();}}
}
void ADD(int a,int b,int c,int d)
{add(a+b*n,c+(1-d)*n);add(c+d*n,a+(1-b)*n);
}
int main()
{freopen("dopetobly.in","r",stdin);freopen("dopetobly.out","w",stdout);cin.tie(0)->sync_with_stdio(0);cin>>n>>m;for(int i=1,x,y,w;i<=m;i++){cin>>x>>y>>w;if(w){ADD(x,1,x+2*n,1);ADD(x,1,y+2*n,0);ADD(y,0,x+2*n,1);ADD(y,0,y+2*n,0);}else{ADD(x,0,y,1);ADD(x+2*n,0,y+2*n,1);}}for(int i=1;i<=4*n;i++) if(!dfn[i]) dfs(i);for(int i=1;i<=n;i++){if(belong[i]==belong[i+n]||belong[i+2*n]==belong[i+2*n+n]){cout<<"NO";return 0;}}cout<<"YES"<<"\n";for(int i=1;i<=n;i++){int fl1=(belong[i]<belong[i+n]);int fl2=(belong[i+2*n]<belong[i+2*n+n]);if(fl1&&!fl2) cout<<'A';else if(!fl1&&fl2) cout<<'B';else if(fl1&&fl2) cout<<'C';else cout<<'D';}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker从入门到上天系列第一篇:Docker简介以及Docker存在的定位和意义

大神推荐:作者有幸结识技术大神孙哥为好友获益匪浅,现在把孙哥作为朋友分享给大家。 孙哥链接:孙哥个人主页 作者简介:一个颜值99分,只比孙哥差一点的程序员。 本专栏简介:话不多说,让我们一起干翻Docker 本文章简介:话不多说,让我们讲清楚首先讲清楚Docker是什么 文章…

JVM线上问题排查基本操作

1. 要解决的问题 CPU 飚高&#xff0c;内存溢出&#xff0c;频繁 GC 2. CPU 飚高 2.1 定位问题的思路 首先找到 CPU 飚高的那个 Java 进程&#xff0c;因为你的服务器会有多个 JVM 进程。 然后找到那个进程中的 “问题线程”&#xff0c; 最后根据线程堆栈信息找到问题代码。…

数据结构HW1

1.(10分) 编程实现矩阵乘法&#xff08;源文件命名matrix.c&#xff09;。函数定义如下&#xff1a; int matmult (int a[][], int b[][]) { // 注意判断a、b维度可能不匹配&#xff0c;且可能是空矩阵 } #include<stdio.h>// 定义矩阵的最大维度 #define MAX_ROWS…

【Redis】hash数据类型-常用命令

文章目录 前置知识常用命令HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGET关于HMSETHLENHSETNXHINCRBYHINCRBYFLOAT 命令小结 前置知识 redis自身就是键值对结构了&#xff0c;哈希类型是指值本⾝⼜是⼀个键值对结构&#xff0c;形如key"key"&#xff0c;value{{field1…

windows10编译高版本openssl

参考文章 参考文章中的windows编译为低版本&#xff0c;在高版本的openssl编译中已经没有&#xff1a;“ms\do_ms.bat”这个脚本了&#xff0c;现记录下编译过程 1、准备工作 安装ActivePerl&#xff0c;安装后会自动写入环境变量&#xff0c;参照参考文章测试安装成功与否&a…

前端框架Vue学习 ——(七)Vue路由(Vue Router)

文章目录 Vue路由使用场景Vue Router 介绍Vue Router 使用 Vue路由使用场景 使用场景&#xff1a;如下图&#xff0c;点击部门管理的时候显示部门管理的组件&#xff0c;员工管理的时候显示员工管理的组件。 前端路由&#xff1a;指的是 URL 中的 hash(#号)与组件之间的对应关…

k8spod详解其二

一&#xff0c;资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时&#xff0c;调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为…

软件开发必备神器!一文读懂10款热门看板工具推荐!

看板&#xff08;Kanban&#xff09;是一种流行的框架&#xff0c;用于实施敏捷和DevOps软件开发。它要求实时沟通每个人的能力&#xff0c;并全面透明地展示正在进行的工作。工作项目在看板上以可视化方式表示&#xff0c;使项目经理和所有团队成员可以随时查看每个工作的状态…

比特币全节点同步加速记录(使用Bitcoin Core钱包)

1. 预先下载或从别的地方拷贝区块数据而不是直接在Bitcoin Core钱包中下载 这方面可以参考 截止到2022年8月的区块数据 2. 将区块头数据和区块实体数据分开存储 区块头数据放到SSD中&#xff0c;区块实体数据放到HDD中 这方面可以参考 BitcoinCore节点同步加速原理和方法实验…

“网站不安全”该如何解决

当我们的网站被客户访问的时候&#xff0c;经常会出现提示不安全的情况&#xff0c;导致客户的不信任&#xff0c;从而出现客户流失的现象&#xff0c;这种情况我们应该如何解决呢&#xff1f; 首先&#xff0c;我们要确定网站会出现不安全的原因&#xff0c;一般来说&#xff…

vue项目中订单完成提交按钮动画

1. 动画1 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>Order</title><!-- <link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/re…

P2910 [USACO08OPEN] Clear And Present Danger S

Portal. 最短路。 考虑到数据范围 N ≤ 100 N\leq 100 N≤100&#xff0c;可以用 Floyd 算法解决。 对于要求的行走序列&#xff0c;按顺序累加答案即可。 注意数组大小。 #include <bits/stdc.h> using namespace std; #define int long longint A[10005],f[105][…

【数据结构】单向链表的增删查改以及指定pos位置的插入删除

目录 单向链表的概念及结构 尾插 头插 尾删 ​编辑 头删 查找 在pos位置前插 在pos位置后插 删除pos位置 删除pos的后一个位置 总结 代码 单向链表的概念及结构 概念&#xff1a;链表是一种 物理存储结构上非连续 、非顺序的存储结构&#xff0c;数据元素的 逻辑顺序 是…

收藏丨20个医疗场景经典、热门数据集资源汇总

当今&#xff0c;人工智能技术在医疗领域的应用日益广泛&#xff0c;其中医疗数据集起到了至关重要的作用。本文将介绍 20 个经典的医疗开源数据集&#xff0c;涵盖了各个部位、CT\MRI\内窥镜等多种模态数据&#xff0c;以帮助研究者们更好地探索和研发医疗AI大模型。 同时&am…

uniapp小程序使用web-view组件页面分享后,点击没有home小房子解决办法

uniapp小程序使用web-view组件页面分享后&#xff0c;点击没有home小房子解决办法 小程序 &#xff1a;IOS 测试正常&#xff0c; 安卓 不显示home 微信小程序使用的是全局自定义导航&#xff0c;通过首页 banner 跳转到一个 web-view 页面&#xff0c;展示官网。 web-view 页…

[vmware]vmware虚拟机压缩空间清理空间

vmware中的ubuntu使用如果拷贝文件进去在删除&#xff0c;vmare镜像文件并不会减少日积月累会不断是的真实物理磁盘空间大幅度减少&#xff0c;比如我以前windows操作系统本来只有30GB最后居然占道硬盘200GB&#xff0c;清理方法有2种。 第一种&#xff1a;vmware界面操作 第二…

德国爆发大规模勒索软件攻击,超70个城市市政服务瘫痪

根据11月3日消息称&#xff0c;德国西部本周发生大规模勒索软件攻击&#xff0c;多个城市和地区的地方政府服务陷入瘫痪。 上周一&#xff08;10月30日&#xff09;早上&#xff0c;德国地方市政服务提供商Sdwestfalen IT公司的服务器被未知的黑客团伙加密。为阻止恶意软件传播…

掌握视频封面提取与剪辑技巧,提升视频品质

在当今的数字媒体时代&#xff0c;视频已成为人们获取信息、娱乐、社交等多种需求的重要方式。一个高质量的视频封面和剪辑技巧可以大大提高视频的吸引力和品质&#xff0c;因此&#xff0c;掌握视频封面提取与剪辑技巧对于视频制作者来说至关重要。那么现在一起来看看云炫AI智…

【STL】:list的模拟实现

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关list的模拟实现&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数据…

sql逻辑优化

1.分页 通常使用每页条数及第一页作为参数 开发接口 GetMapping("/querySystemList") public List<SystemAduit> querySystemList(RequestParam("keyword") String keyword,RequestParam(name "offset", defaultValue "0") i…