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 解决。

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 滈葕的更多相关文章

  1. 使用T4模板生成代码的学习

    之前做项目使用的都是Db First,直接在项目中添加Entity Framework,使用T4模板(T4模板引擎之基础入门)生成DAL BLL层等(T4模板是一个同事给的,也没有仔细研究,代码如下: ...

  2. stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)

    在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(trai ...

  3. (六)6.5 Neurons Networks Implements of Sparse Autoencoder

    一大波matlab代码正在靠近.- -! sparse autoencoder的一个实例练习,这个例子所要实现的内容大概如下:从给定的很多张自然图片中截取出大小为8*8的小patches图片共1000 ...

  4. 基于jquery的表格动态创建,自动绑定,自动获取值

    最近刚加入GUT项目,学习了很多其他同事写的代码,感觉受益匪浅. 在GUT项目中,经常会碰到这样一个问题:动态生成表格,包括从数据库中读取数据,并绑定在表格中,以及从在页面上通过jQuery新增删除表 ...

  5. Text Template Transformation Toolkit

    Text Template Transformation Toolkit       1.且算简介         笔者以一个英文字母和一个数字取了一个简单的名字.名唤"T4"(名 ...

  6. [Neural Networks] (Convolutional Neural Networks)CNN-卷积神经网络学习

    参考:http://blog.csdn.net/zouxy09/article/details/8781543 ( 但其中有部分错误) http://ufldl.stanford.edu/wiki/i ...

  7. (转载)Convolutional Neural Networks卷积神经网络

    Convolutional Neural Networks卷积神经网络 Contents 一:前导 Back Propagation反向传播算法 网络结构 学习算法 二:Convolutional N ...

  8. 误差逆传播(error BackPropagation, BP)算法推导及向量化表示

    1.前言 看完讲卷积神经网络基础讲得非常好的cs231后总感觉不过瘾,主要原因在于虽然知道了卷积神经网络的计算过程和基本结构,但还是无法透彻理解卷积神经网络的学习过程.于是找来了进阶的教材Notes ...

  9. PS各个工具的字母快捷键和英…

    原文地址:PS各个工具的字母快捷键和英文全名作者:Tycho     选框-Marquee(M)     移动-move(V)     套索-Lasso(L)     魔棒-Wand(W) 喷枪-in ...

  10. [转载]PS各个工具的字母快捷键和英文全名

    原文地址:PS各个工具的字母快捷键和英文全名作者:Tycho     选框-Marquee(M)     移动-move(V)     套索-Lasso(L)     魔棒-Wand(W) 喷枪-in ...

随机推荐

  1. How-many

    #include <bits/stdc++.h> #include <termio.h> #include <unistd.h> typedef long long ...

  2. Go语言目前主要有哪些应用框架

    Go语言是一种高效.快速.简洁的编程语言,近年来越来越受到开发者的欢迎.由于Go语言的快速发展,出现了很多的优秀框架来支持Go应用程序的开发.以下是一些目前比较流行的Go语言框架: 1. Gin:Gi ...

  3. PTA甲级—树

    1.树的遍历 1004 Counting Leaves (30分) 基本的数据结构--树,复习了链式前向星,bfs遍历判断即可 #include <cstdio> #include < ...

  4. MyBatisPlus——标准数据层开发

    标准数据层开发 标准数据层CRUD功能 lombok 一个java类库,提供了一组注解,简化POJO实体类开发    常用注解@Data    为当前实体类在编译期设置对应的get/set方法,无参/ ...

  5. RDK X5首发上手体验!真的太帅啦!!!

    RDK X5首发上手体验!真的太帅啦!!! 本Blog同步发表于: 地瓜机器人开发者论坛: CSDN: 一年多以前无意中了解到了RDK X3,之后我便迅速的被地平线机器人开发者论坛(现在改名为了地瓜机 ...

  6. [OI] 容斥原理拓展

    10.容斥原理拓展 10.1 二项式反演 \[P.10.1(1) \] 设 \(U=\{S_1,S_2,S_3...S_n\}\),且任意 \(i\) 个元素的交集都相等 定义 \(g(x)\) 为 ...

  7. 使用 Docker 部署 MySql

    前言 虽然不建议将需要持久化的数据保存在容器中,但是自己平时做个小项目玩玩还是没什么问题的. 拉取镜像 docker pull mysql 不加 tag 的话默认从 DockerHub 拉取最新版本的 ...

  8. springmvc参数传递不给参数值默认值设置方法

    @RequestMapping("hello") public voiid test001(@RequestParam(defaultValue = "11") ...

  9. forEach filter some map every 的区别

    forEach 遍历数组,不会改变原数组,没有返回值 : filter 过滤数组 相同点:都不改变原数组,都是数组的实例方法 :

  10. spring boot 官网提供所有组件

    所有资源来自于官网:https://start.spring.io/,在此整理只是为了方便查看 Developer Tools Spring Boot DevToolsProvides fast ap ...