P1955 [NOI2015] 程序自动分析题解

题目

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

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

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

输入输出格式

输入格式

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

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

第一行包含一个正整数n,表示该问题中需要被满足的约束条件个数。接下来n行,每行包括三个整数i,j,e,描述一个相等/不等的约束条件,相x邻整数之间用单个空格隔开。若e=1,则该约束条件为xi​=xj​。若e=0,则该约束条件为xi​!=xj​。

输出格式

输出包括t行。

输出文件的第k行输出一个字符串YES或者NO(字母全部大写),YES表示输入中的第k个问题判定为可以被满足,NO表示不可被满足。

输入输出样例

输入样例

2
2
1 2 1
1 2 0
2
1 2 1
2 1 1

输出样例

NO
YES

解析

这个题目采用并查集解决,先根据e值的大小将式子进行排序,先处理相等的式子,将相等的式子合并在一个集合里面,然后处理不等的式子,如果不等的式子出现在同一个集合里面,那么直接返回NO,如果没有返回YES。这个题目由于数据比较大,所以将数据离散化将空间进行压缩。

#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
const int max_n=200005;
struct node{int l,r,e;
}m[100005];
int f[max_n];
bool cmp(node a,node b){return a.e>b.e;
}
int find(int x){if(f[x]!=x){f[x]=find(f[x]);}return f[x];
}
void ad(int x,int y){x=find(x);y=find(y);if(x==y){return;}f[x]=y;
}
void judge(){int n,mark=1;//使用mark进行离散化数据压缩空间scanf("%d",&n);map<int,int> ds;for(int i=1;i<=n;i++){scanf("%d%d%d",&m[i].l,&m[i].r,&m[i].e);if(!ds[m[i].l]){ds[m[i].l]=mark;mark++;}if(!ds[m[i].r]){ds[m[i].r]=mark;mark++;}}sort(m+1,m+1+n,cmp);for(int i=1;i<=n;i++){if(m[i].e){ad(ds[m[i].l],ds[m[i].r]);}else{if(find(ds[m[i].l])==find(ds[m[i].r])){printf("NO\n");return;}}}printf("YES\n");
}
int main(){int t;scanf("%d",&t);while(t--){for(int i=1;i<=max_n;i++){f[i]=i;}judge();}return 0;
}

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

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

相关文章

美国欲在菲律宾扩大半导体芯片投资

近年来&#xff0c;在复杂的国际形势和保障供应链安全需求的影响下&#xff0c;东南亚国家如新加坡、马来西亚和越南已经成为众多半导体巨头设立海外业务的重要选址地。现在&#xff0c;菲律宾也有望加入这些国家的行列。 最近&#xff0c;美国商务部长吉娜雷蒙多表示希望帮助…

思科网络中如何进行动态NAT配置

一、什么是动态NAT&#xff1f;动态NAT与静态NAT的区别是什么&#xff1f; &#xff08;1&#xff09;动态NAT&#xff08;Network Address Translation&#xff09;是一种网络地址转换技术&#xff0c;它会动态地将内部私有网络中的局域网IP地址映射为公共IP地址&#xff0c;…

Hack The Box-Codify

目录 信息收集 rustscan nmap dirsearch WEB 提权 get user get root 信息收集 rustscan ┌──(root㉿ru)-[~/kali/hackthebox] └─# rustscan -b 2250 10.10.11.239 --range0-65535 --ulimit4500 -- -A -sC .----. .-. .-. .----..---. .----. .---. .--. .-. …

JVM 类的加载篇

我们都知道一个类从加载到卸载一共分为七个过程 加载 - 链接(验证 - 准备 - 解析) - 初始化 - 使用 - 卸载 下文我们将详细解析这些过程 谁需要加载? 在Java中数据类型分为基本数据类型和引用数据类型,基本数据类型由虚拟机预定义,引用数据类型则需要类的加载 1.加载/装载(loa…

Docker入门二(应用部署、迁移与备份)

文章目录 一、应用部署1.MySQL部署2.Redis部署3.Nginx部署 二、迁移与备份1.容器做成镜像2.把镜像被分成压缩包 一、应用部署 1.MySQL部署 在dokcer中部署mysql&#xff0c;以后不需要在宿主机上装mysql1.做端口映射docker run -id --namemysql5.7 -p 3306:3306 -e MYSQL_ROOT…

Fundamentals of Amazon MSK (Amazon Managed Streaming for kafka)

Amazon Managed Streaming for Apache Kafka 或 Amazon MSK 允许您在 AWS 中运行利用 Apache Kafka 的应用程序。 Kafka 提供了一个流处理平台&#xff0c;并作为基于发布者/订阅者的持久消息传递系统运行。 其主要功能是能够以极高的容错能力获取数据&#xff0c;允许这些记录…

网工内推 | 国企、上市公司网工、运维,CCNA即可,补贴福利多

01 深圳新思 招聘岗位&#xff1a;网络工程师&#xff08;中电集团&#xff09; 职责描述&#xff1a; 1&#xff1a;负责办公室电脑的桌面运维&#xff0c;主要是windows维护与应用维护&#xff1b; 2&#xff1a;负责办公室网络设备配置&#xff0c;如防火墙&#xff0c;交换…

CMake 编译 raylib 程序

CMakeLists.txt 内容如下&#xff1a; cmake_minimum_required(VERSION 3.0) project(t001) # 搜索指定目录下源文件 file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) # 包含头文件路径 include_directories(F:/vclib/raylib-5.0_win64_mingw-w64/include) # 包含静态…

CountDownLatch介绍和使用

1. CountDownLatch是什么 CountDownLatch 是 Java.util.concurrent 包中的一个同步工具类&#xff0c;用于控制线程的执行顺序。它的主要作用是让一个或多个线程等待其他线程完成操作后再继续执行。 2. CountDownLatch 类常用方法 CountDownLatch(int count) 是 CountDownLa…

使用maven命令行。手动搭建maven项目

要使用Maven命令行&#xff0c;首先需要确保已经安装了Maven。接下来&#xff0c;可以按照以下步骤手动搭建Maven项目&#xff1a; 创建项目目录&#xff1a;在命令行中切换到你希望创建项目的目录下&#xff0c;然后执行以下命令&#xff1a; mkdir myproject cd myproject初…

软件测试基础概念

一、需求 定义&#xff1a;满足用户期望或正式规定文档所需条件和技能&#xff0c;包含用户需求 用户需求&#xff1a;用户使用产品所必须完成的任务 该需求比较简略 软件需求&#xff1a;详细描述开发人员必须实现的软件功能 需求是标准&#xff0c;测试人员按照这个标准测…

python之第三方模块

配置pip源 更新pip pip install --upgrade pip 下载清华源 pip config set global.index-url Simple Index requests 用代码模拟向浏览器发送请求 #返回的是json格式&#xff0c;分页查询 import requests for i in range(0,100,10):resrequests.get(url"https://mov…

全球首个 AI 超级工程师:拥有全栈技能,一个指令就能完成整个开发过程

全球首位AI软件工程师Devin是由初创公司Cognition推出的&#xff0c;它被认为是世界上第一个完全自主的AI软件工程师[2][15]。Devin具备强大的编程和软件开发能力&#xff0c;能够在多个方面协助或完全独立地完成软件开发任务[15]。它的核心能力包括自学新语言、开发迭代App、自…

基于qt和css的MP3音乐播放器引擎开发

1 QMainWindow&#xff1a; QMainWindow 是用于创建应用程序主窗口的类。它通常用于具有菜单栏、工具栏、状态栏等标准组件的窗口。 QMainWindow 提供了一种框架&#xff0c;用于组织和管理应用程序的用户界面元素。它可以包含其他小部件&#xff08;widgets&#xff09;和布局…

C语言分析基础排序算法——归并排序

目录 归并排序 递归版本 非递归版本 非递归版本的问题 归并排序小优化 归并排序 归并排序&#xff0c;分为分治以及合并&#xff0c;分治部分可以使用递归或者非递归完成&#xff0c;归并排序的基本思路是&#xff1a;将已有序的子序列合并&#xff0c;得到完全有序的序列…

解决 :nvrtc: error: invalid value for --gpu-architecture (-arch)

核心&#xff1a;在显卡安装的cuda版本适配的pytorch中&#xff0c;更换pytorch的版本 刚遇到这个错误时&#xff0c;在网上搜索了一下&#xff0c;感谢博主1和博主2的解决方法带给我的启发。 标题服务器cuda是11.3版本&#xff0c;配置其他环境“御用”的pytorch安装语句 co…

社区维修平台|基于SpringBoot+ Mysql+Java+JSP技术的社区维修平台设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 住户后台功能 维修员前台功能 维修员后台功能 管理员功能登录 系统功能设计 数据库E…

用python实现Dubins曲线生成

Dubins曲线是连接两个具有指定方向和位置的点的最短路径&#xff0c;其中路径受到固定曲率约束&#xff08;如车辆的转向限制&#xff09;。Dubins曲线常用于机器人路径规划、车辆轨迹规划等领域。 Dubins曲线可以分为三种类型&#xff1a;CCC (Curve-Curve-Curve), CCL (Curv…

C++面试题和笔试题(四)

一、intx[6][4],(*p)[4];px;则*(p2)指向哪里&#xff1f; A X[0][1]B X[0][2]C X[1][0]D X[2][0] 官方解释&#xff1a; D int x[6][4], (*p)[4]; p x; 在这里&#xff0c;x 是一个二维数组&#xff0c;它有6行和4列。p 是一个指向具有4个整数的数组的指针。 当你执行…

DevOps-SonarQube整合Jenkins

下载SonarQube Scanner 登录Jenkins服务器&#xff0c;下载SonarQube Scanner wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip安装unzip&#xff0c;需要通过它来解压zip压缩包 yum install -y unzip解压So…