2023NOIP A层联测25-滈葕

2023-11-07 03:12
文章标签 25 联测 2023noip

本文主要是介绍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';}
}

这篇关于2023NOIP A层联测25-滈葕的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/360860

相关文章

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

2025年25届计算机毕业设计:如何实现高校实验室Java SpringBoot教学管理系统

✍✍计算机毕业编程指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、Python、微信小程序、大数据实战项目集 ⚡⚡文末获取源码 文章目录 ⚡⚡文末获取源码高校实验室教学管理系统-研究背景高校实验室教学管理系

智力题:25匹马5条跑道找最快的3匹马,最少需要跑几次?

要找出25匹马中最快的3匹马,使用5条跑道,最少需要跑几次?我们可以通过逐步推理来解决这个问题。 第一步:分组比赛 首先,我们将25匹马分成5组,每组5匹马。每组进行一次比赛,这样我们就有5次比赛的结果。 组1:A1, A2, A3, A4, A5 组2:B1, B2, B3, B4, B5 组3:C1, C2, C3, C4, C5 组4:D1, D2, D3, D4, D5 组

芬兰手游业25年发展史

自2010年Rovio凭借《愤怒的小鸟》成功以来,芬兰的优秀开发者可以说是不断的引领手游潮流,有Frogmid、Seriously这样的小型团队,也有Supercell这样的世界收入冠军。除却收入之外,我们可以发现芬兰开发商的手游绝大多数都是具有独特创意的。 为什么芬兰手游业可以具有如此之大的竞争优势?其他人想要赶上应该怎么做?这个答案从来都不是能够简单作答的,因为它根植于芬兰的行业发展史,所以

图形API学习工程(25):实现法线贴图

工程GIT地址:https://gitee.com/yaksue/yaksue-graphics 目标 在《图形API学习工程(10):基础光照》中,我实现了最基础的光照,同时也表现了法线的作用。 在《图形API学习工程(11):使用纹理》中,工程已经能够加载纹理贴图。 这样,法线贴图 所需的准备已经完成,可以在工程里实现这个技术了。 (关于法线贴图的意义,可见上一篇博客《从“法线贴图的意义

【简历】25届南京某一本JAVA简历:简历通过率还好,但是拿不到OFFER

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 简历说明 今天看一份25届南京某一本大学的Java简历。 这个简历呢,学校是一本。我们说上来先要定校招层次,这个层次就按照中厂来讲。因为现在很多的双非一本目标都是在中厂。 这个同学有个实习经历,一本有八成的同学主项目都是重复的。HR他只能看到项目重不重复,要点对不对他不知道,就从这个角度来看,这位同学

GNU的伪操作 (25)

这里主要是 对 GNU的 各个伪操作进行 详细的解释。 先来看着几个 伪操作。 .byte,  .short,  .long,  .quad , .float ,  这个是关于 字节的。 .string   .ascii 是关于字符串的。 这个字符串编译器是可以自动在末尾补0 的。 举例: val:         .word 0x11223344         m

25版王道数据结构课后习题详细分析 第八章 8.2 插入排序

一、单项选择题 ———————————————————— ———————————————————— 解析:直接插入排序在最坏的情况下要做n(n-1)/2次关键字的比较,当n=5时, 关键字的比较次数为10。注意不考虑与哨兵的比较。 正确答案: ———————————————————— ———————————————————— 解析:由于序列初始基本有序,因此使用直接插入排序

游卡,三七互娱,得物,顺丰,快手,oppo,康冠科技,途游游戏,埃科光电25秋招内推

游卡,三七互娱,得物,顺丰,快手,oppo,康冠科技,途游游戏,埃科光电25秋招内推 ①顺丰 【招聘岗位】研发、算法、大数据、产品、项管、设计、人资等 【官方内推码】4FOLXH 【一键内推】https://sourl.cn/UzbDat ②游卡 【岗位】程序技术、产品策划、美术、发型运营、职能综合、桌游业务等大类 【一键内推】https://sourl.cn/PHiZZE 【内推码】DSymt

(175)时序收敛--->(25)时序收敛二五

1 目录 (a)FPGA简介 (b)Verilog简介 (c)时钟简介 (d)时序收敛二五 (e)结束 1 FPGA简介 (a)FPGA(Field Programmable Gate Array)是在PAL (可编程阵列逻辑)、GAL(通用阵列逻辑)等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了