HZOJ-322: 程序自动分析

 题目描述

​ 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足。

​ 考虑一个约束满足问题的简化版本:假设 x1,x2,x3,…�1,�2,�3,… 代表程序中出现的变量,给定n�个形如xi=xj��=��或xi≠xj��≠�� 的变量相等/不等的约束条件,请判定是否可以分别为每一个变量赋予恰当的值,使得上述所有约束条件同时被满足。

​ 例如,一个问题中的约束条件为:x1=x2,x2=x3,x3=x4,x1≠x4�1=�2,�2=�3,�3=�4,�1≠�4,这些约束条件显然是不可能同时被满足的,因此这个问题应判定为不可被满足。

​ 现在给出一些约束满足问题,请分别对它们进行判定。


输入

​ 输入文件的第11行包含11个正整数t�,表示需要判定的问题个数。注意这些问题之间是相互独立的。

​ 对于每个问题,包含若干行:

​ 第11行包含11个正整数n�,表示该问题中需要被满足的约束条件个数。

​ 接下来n�行,每行包括33个整数i,j,e�,�,�,描述11个相等/不等的约束条件,相邻整数之间用单个空格隔开。若e=1�=1,则该约束条件为xi=xj��=��;若e=0�=0,则该约束条件为xi≠xj��≠��。

输出

​ 输出文件包括t�行。

​ 输出文件的第11行输出一个字符串“YES”或者“NO”(不包含引号,字母全部大写),“YES”表示当前问题判定为可以被满足,“NO”表示不可被满足。

输入样例1
2
2
1 2 1
1 2 0
2
1 2 1
2 1 1
输出样例1
NO
YES
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
using namespace std;
class UnionSet {
public:UnionSet(int n) : fa(n + 1) {for (int i = 0; i <= n; i++) fa[i] = i;}int get(int x) {return fa[x] = (fa[x] == x ? x : fa[x]);}void merge(int a, int b) {fa[get(a)] = get(b);return;}vector<int> fa;
};struct Dara {int i, j, e;
};
void solve() {int n, cnt = 0;cin >> n;vector<Dara> arr(n);unordered_map<int, int> h;for (int i = 0; i < n; i++) {cin >> arr[i].i >> arr[i].j >> arr[i].e;if (h.find(arr[i].i) == h.end()) h[arr[i].i] = cnt++;if (h.find(arr[i].j) == h.end()) h[arr[i].j] = cnt++;}UnionSet u(2 * n);for (int i = 0; i < n; i++) {if (arr[i].e == 0) continue;u.merge(h[arr[i].i], h[arr[i].j]);}int flag = 1;for (int i = 0; i < n && flag; i++) {if (arr[i].e == 1) continue;if (u.get(h[arr[i].i]) == u.get(h[arr[i].j])) {flag = 0;}}if (flag) cout << "YES" << endl;else cout << "NO" << endl;return;
}
int main() {int m;cin >> m;while (m--) {solve();}return 0;
}

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

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

相关文章

万物归宗系列01-html基本语法

万物归宗系列&#xff0c;即什么都懂一点系列。 HTML是标签语言&#xff0c;一般成双成对。 Hypertext Markup Language&#xff1a;超⽂本标记语⾔。是⽤来制作⽹页的⼀种标记语⾔。 1 基本框架 <!DOCTYPE html> <html lang"en"> <head><meta…

Linux命令(103)之wc

linux命令之wc 1.wc介绍 linux命令wc是用来统计文件的字数、行数和字节数 2.wc用法 wc [参数] [filename] wc参数 参数说明-l统计总行数&#xff0c;备注&#xff1a;常用于查看进程是否启动-L统计最长一行的字符数-c统计字节数-m统计字符数-w统计单词数 3.实例 3.1.统计…

Pytorch训练深度强化学习时CPU内存占用一直在快速增加

最近在用MATD3算法解决多机器人任务&#xff0c;但是在训练过程中&#xff0c;CPU内存一直在增加&#xff08;注意&#xff0c;不是GPU显存&#xff09;。我很头疼&#xff0c;以为是算法代码出了问题&#xff0c;导致了内存泄漏&#xff0c;折腾了1天也没解决。后来用memory_p…

057:mapboxGL中layout,paint等属性的函数表达说明

第057个 点击查看专栏目录 本篇文章是mapbox的layer中layout,paint等属性的函数表达 mapbox中 Function 是什么 函数 Function 可以作为其 layout布局类属性和 paint 绘制类属性的属性值。在使用 Function 作为属性值时,实际上是一个对象。 layers的3种函数类型 Function …

根据SpringBoot Guides完成进行示例学习(详细步骤)

目录 1.打开Spring | Guides官网&#xff0c;或者直接搜索springboot都可 2.选择要学习的内容 3.根据提示的网址&#xff0c;Git到本地 4.将文件用IDEA打开&#xff0c;根据教程完成示例&#xff0c;这里不做细致讲解 5.运行项目 6.在终端查看运行结果 以Scheduling Task…

call函数和apply函数的区别

call和apply是 JavaScript 中的两个函数方法&#xff0c;用于调用函数并指定函数内部的this值以及传递参数。它们的主要区别在于参数的传递方式。 call方法&#xff1a;call方法允许你在调用函数时&#xff0c;显式地指定函数内部的this值和参数列表。它的语法为&#xff1a; …

Apollo的搭建

Apollo的搭建 1.环境准备 jdk : 1.8 mysql 5.6.5 2.下载 两种方式&#xff1a; a.下载源码自己编译&#xff08;需要修改源码的可以选择&#xff09; 源码&#xff1a;https://github.com/ctripcorp/apoll b.编译好的直接使用 地址&#xff1a;Releases apol…

集成测试规范

集成测试是指将所有模块或组件组合在一起&#xff0c;测试整个系统是否符合预期的功能和性能要求。以下是一个简单的集成测试模板&#xff0c;可以根据具体的测试需求进行修改和扩展&#xff1a; 1. 测试计划 a. 测试范围&#xff1a;测试的模块或组件&#xff0c;以及需要覆…

卷王问卷考试系统SurveyKing,开源调查问卷和考试系统源码

卷王问卷考试系统/SurveyKing是一个功能最强大的开源调查问卷和考试系统&#xff0c;可以快速部署&#xff0c;并适用于各行业。该系统提供了在线表单设计、数据收集、统计和分析等功能&#xff0c;支持20多种题型&#xff0c;多种创建问卷方式和多种问卷设置。 无论您是需要进…

力扣刷题 day49:10-19

1.二进制手表 二进制手表顶部有 4 个 LED 代表 小时&#xff08;0-11&#xff09;&#xff0c;底部的 6 个 LED 代表 分钟&#xff08;0-59&#xff09;。每个 LED 代表一个 0 或 1&#xff0c;最低位在右侧。 例如&#xff0c;下面的二进制手表读取 "4:51" 。 给你…

centos 7.9 安装python 3.10的tls问题,

本地开发升级成了py3.10.6,服务器测试时安装py3.10.4 发现无法正常使用pip3 pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. 印象中py3的高版本依赖高版本的openssl,centos 7下默认的openssl为1.0.x, 问题很简…

异步加载JS的方法

异步加载 JavaScript (JS) 文件是提高网页性能的一种常用技术&#xff0c;这样可以使页面在等待 JS 文件加载和执行时不会阻塞。以下是一些异步加载 JS 的方法&#xff1a; 使用 <script> 标签的 async 属性 通过将 <script> 标签的 async 属性设为 true&#xf…

Java后端开发(六)-- 二维码的生成

目录 1. 需要的jar导入 2. ConvertToMultipartFile类 3. QRCodeUtil(二维码工具类) 4.示例演示: 1. 需要的jar导入 <!-- 生成二维码 --><dep

Linux Docker图形化工具Portainer如何进行远程访问

文章目录 前言1. 部署Portainer2. 本地访问Portainer3. Linux 安装cpolar4. 配置Portainer 公网访问地址5. 公网远程访问Portainer6. 固定Portainer公网地址 前言 Portainer 是一个轻量级的容器管理工具&#xff0c;可以通过 Web 界面对 Docker 容器进行管理和监控。它提供了可…

1814_ChibiOS中的时间以及时间间隔处理

全部学习汇总&#xff1a; GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 时间的相关配置&#xff0c;有tick的计数精度、时钟频率、间隔时间精度、时间类型大小等不同的配置。这些参数&#xff0c;涉及到系统的时间计数…

日志回滚工作原理剖析及在文件系统的作用

日志回滚原理 当涉及到崩溃恢复和一致性保护时&#xff0c;日志回滚是一种常见的机制。它通过记录写入操作到一个事务日志中&#xff0c;而不是直接应用到文件系统&#xff0c;以保护文件系统的一致性。下面是日志回滚的一般工作原理&#xff1a; 日志记录&#xff1a;在进行写…

FPGA驱动SDRAM

文章目录 一.SDRAM简介&#xff08;手册分析&#xff09;1.1存储空间1.2特征1.3引脚1.4内部结构1.5需要关注的一些时间1.6模式寄存器1.7命令真值表 二.时序分析&#xff08;手册分析&#xff09;2.1Avalon时序2.2行激活时序2.3列读写时序2.4读数据2.5写数据 三.初步设计3.1状态…

vue3插件开发,上传npm

创建插件 在vue3工程下&#xff0c;创建组件vue页: toolset.vue。并设置组件名称。注册全局组件。新建index.js文件。内容如下&#xff0c;可在main.js中引入index.js&#xff0c;注册该组件进行测试。![在这里插入图片描述](https://img-blog.csdnimg.cn/a3409d2cbeec41c797d5…

springboot整合tkmybatis和tkmybatis 逆向工程

1.添加依赖 <!--mybaits--> <dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.0.3</version> </dependency> 打入mybatis.xml <resources><resourc…

零基础学习HTML5

1. 使用软件 vscode 谷歌浏览器 vscode下载地址&#xff1a;https://code.visualstudio.com/ 谷歌可以使用360软件管家安装 2. 安装插件 在vscode中安装插件&#xff1a;open in browser&#xff0c;点击Extensions后搜索对应插件名然后点击安装Install 安装完成后可在htm…