2023NOIP A层联测25 T4 滈葕
2023NOIP A层联测25 T4 滈葕
配血实验与2-SAT。
思路

\(z=1\) 表示配血实验发生凝集反应,设 \(a_i,b_i\) 分别表示第 \(i\) 个人有无凝集原 A,B。(无凝集原 A,肯定有抗 A 凝集素,B同理)那么发生反应的必要条件是 \(a_x \and \neg a_y\) 或 \(b_x \and \neg b_y\),所以 \(z=(a_x\and \neg a_y) \or (b_x \and \neg b_y)\)。
若 \(z=0\) 则有 \(\neg(a_x\and \neg a_y) \and \neg (b_x \and \neg b_y)=(\neg a_x \or a_y) \and (\neg b_x \and b_y)\)。
若 \(z=1\) 则有 \(z=(a_x\and \neg a_y) \or (b_x \and \neg b_y)=(a_x \or b_x)\and(a_x \or \neg b_y)\and (\neg a_y \or b_x)\and (\neg a_y \or \neg b_y)\)。
这两个都可以使用 2-SAT 解决。
CODE
// ubsan: undefined
// accoders
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
struct node
{
int to,nxt;
}edge[maxn*8];
int n,m,tot,dfntot,num;
int dfn[maxn],low[maxn],id[maxn],A[maxn][2],B[maxn][2],head[maxn];
bool vis[maxn];
stack<int>stk;
void add(int x,int y)
{
tot++;
edge[tot].to=y;
edge[tot].nxt=head[x];
head[x]=tot;
}
void dfs(int u)
{
stk.push(u),dfn[u]=low[u]=++dfntot,vis[u]=1;
for(int i=head[u];i;i=edge[i].nxt)
{
int v=edge[i].to;
if(!dfn[v])
{
dfs(v);
low[u]=min(low[u],low[v]);
}
else if(vis[v]) low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u])
{
num++;
while(stk.top()!=u) vis[stk.top()]=0,id[stk.top()]=num,stk.pop();
vis[stk.top()]=0,id[stk.top()]=num;
stk.pop();
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) A[i][0]=i,A[i][1]=i+n,B[i][0]=i+2*n,B[i][1]=i+3*n;
for(int i=1;i<=m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(z==0)
{
add(A[x][1],A[y][1]),add(A[y][0],A[x][0]);//!a a
add(B[x][1],B[y][1]),add(B[y][0],B[x][0]);//!b b
}
else
{
add(A[x][0],B[x][1]),add(B[x][0],A[x][1]);
add(A[x][0],B[y][0]),add(B[y][1],A[x][1]);
add(A[y][1],B[x][1]),add(B[x][0],A[y][0]);
add(A[y][1],B[y][0]),add(B[y][1],A[y][0]);
}
}
for(int i=1;i<=n*4;i++) if(!dfn[i]) dfs(i);
for(int i=1;i<=n;i++) if(id[A[i][0]]==id[A[i][1]]||id[B[i][0]]==id[B[i][1]]) printf("NO"),exit(0);
printf("YES\n");
for(int i=1;i<=n;i++)
{
if(id[A[i][0]]<id[A[i][1]]&&id[B[i][0]]<id[B[i][1]]) printf("D");
if(id[A[i][0]]<id[A[i][1]]&&id[B[i][0]]>id[B[i][1]]) printf("A");
if(id[A[i][0]]>id[A[i][1]]&&id[B[i][0]]<id[B[i][1]]) printf("B");
if(id[A[i][0]]>id[A[i][1]]&&id[B[i][0]]>id[B[i][1]]) printf("C");
}
}
2023NOIP A层联测25 T4 滈葕的更多相关文章
- 使用T4模板生成代码的学习
之前做项目使用的都是Db First,直接在项目中添加Entity Framework,使用T4模板(T4模板引擎之基础入门)生成DAL BLL层等(T4模板是一个同事给的,也没有仔细研究,代码如下: ...
- stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)
在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(trai ...
- (六)6.5 Neurons Networks Implements of Sparse Autoencoder
一大波matlab代码正在靠近.- -! sparse autoencoder的一个实例练习,这个例子所要实现的内容大概如下:从给定的很多张自然图片中截取出大小为8*8的小patches图片共1000 ...
- 基于jquery的表格动态创建,自动绑定,自动获取值
最近刚加入GUT项目,学习了很多其他同事写的代码,感觉受益匪浅. 在GUT项目中,经常会碰到这样一个问题:动态生成表格,包括从数据库中读取数据,并绑定在表格中,以及从在页面上通过jQuery新增删除表 ...
- Text Template Transformation Toolkit
Text Template Transformation Toolkit 1.且算简介 笔者以一个英文字母和一个数字取了一个简单的名字.名唤"T4"(名 ...
- [Neural Networks] (Convolutional Neural Networks)CNN-卷积神经网络学习
参考:http://blog.csdn.net/zouxy09/article/details/8781543 ( 但其中有部分错误) http://ufldl.stanford.edu/wiki/i ...
- (转载)Convolutional Neural Networks卷积神经网络
Convolutional Neural Networks卷积神经网络 Contents 一:前导 Back Propagation反向传播算法 网络结构 学习算法 二:Convolutional N ...
- 误差逆传播(error BackPropagation, BP)算法推导及向量化表示
1.前言 看完讲卷积神经网络基础讲得非常好的cs231后总感觉不过瘾,主要原因在于虽然知道了卷积神经网络的计算过程和基本结构,但还是无法透彻理解卷积神经网络的学习过程.于是找来了进阶的教材Notes ...
- PS各个工具的字母快捷键和英…
原文地址:PS各个工具的字母快捷键和英文全名作者:Tycho 选框-Marquee(M) 移动-move(V) 套索-Lasso(L) 魔棒-Wand(W) 喷枪-in ...
- [转载]PS各个工具的字母快捷键和英文全名
原文地址:PS各个工具的字母快捷键和英文全名作者:Tycho 选框-Marquee(M) 移动-move(V) 套索-Lasso(L) 魔棒-Wand(W) 喷枪-in ...
随机推荐
- Diskpart 操作
DiskPart 是 Windows 操作系统中的一个命令行工具,用于管理磁盘分区.它可以创建.删除.格式化和调整分区大小,还可以设置活动分区等.以下是一些常用的 DiskPart 命令和操作步骤. ...
- Go 闭包捕获问题
在 Go 语言中,闭包(closure)是一个函数值,它引用了其外部作用域中的变量.简而言之,闭包能够"捕获"并"记住"其外部作用域中的变量,即使这个变量的生命 ...
- 探索 Nuxt Devtools:功能全面指南
title: 探索 Nuxt Devtools:功能全面指南 date: 2024/9/3 updated: 2024/9/3 author: cmdragon excerpt: 摘要:本文介绍了Nu ...
- 【YashanDB知识库】账号被锁,如何分析具体原因
问题现象 客户刚开始使用YashanDB的时候,经常收到客户反馈账号被锁,但是不知道哪里触发了. 问题的风险及影响 客户环境为测试环境,影响测试业务的开展. 问题影响的版本 YashanDB版本:23 ...
- ASP.NET Core – Static Files
前言 记入一些冷门的知识. Custom content-type var fileExtensionContentTypeProvider = new FileExtensionContentTyp ...
- .NET全局静态可访问IServiceProvider(支持Blazor)
DependencyInjection.StaticAccessor 前言 如何在静态方法中访问DI容器长期以来一直都是一个令人苦恼的问题,特别是对于热爱编写扩展方法的朋友.之所以会为这个问题苦恼,是 ...
- C#|.net core 基础 - 扩展数组添加删除性能最好的方法
今天在编码的时候遇到了一个问题,需要对数组变量添加新元素和删除元素,因为数组是固定大小的,因此对新增和删除并不友好,但有时候又会用到,因此想针对数组封装两个扩展方法:新增元素与删除元素,并能到达以下三 ...
- HTTP——请求数据格式
请求数据格式
- logisim学习感想(持续更新)
状态机类型 存在两种类型的状态机,分别为mealy型状态机和moore型状态机,在实验中,二者的大体实现如下: 其中从输入到输出的连线只有mealy状态机才有,而moore型则无此线. 区分两种类型的 ...
- js的作用域有哪些 and 他们的特点
全局作用域:是所有代码的执行环境,比如script标签里所有的代码 或 独立的js 文件: 局部作用域:是函数内部代码的执行环境: 块级作用域:是 {} 内的代码执行环境: