news 2026/5/21 13:05:52

洛谷 P1955 [NOI2015] 程序自动分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 P1955 [NOI2015] 程序自动分析

题目描述

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

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

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

输入格式

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

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

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

输出格式

输出包括 t 行。

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

输入输出样例

输入 #1复制

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

输出 #1复制

NO YES

输入 #2复制

2 3 1 2 1 2 3 1 3 1 1 4 1 2 1 2 3 1 3 4 1 1 4 0

输出 #2复制

YES NO

说明/提示

【样例解释1】

在第一个问题中,约束条件为:x1​=x2​,x1​=x2​。这两个约束条件互相矛盾,因此不可被同时满足。

在第二个问题中,约束条件为:x1​=x2​,x1​=x2​。这两个约束条件是等价的,可以被同时满足。

【样例说明2】

在第一个问题中,约束条件有三个:x1​=x2​,x2​=x3​,x3​=x1​。只需赋值使得 x1​=x2​=x3​,即可同时满足所有的约束条件。

在第二个问题中,约束条件有四个:x1​=x2​,x2​=x3​,x3​=x4​,x4​=x1​。由前三个约束条件可以推出 x1​=x2​=x3​=x4​,然而最后一个约束条件却要求 x1​=x4​,因此不可被满足。

【数据范围】

所有测试数据的范围和特点如下表所示:

测试点编号n 的规模i,j 的规模约定
11≤n≤101≤i,j≤1041≤t≤10e∈{0,1}
2
31≤n≤100
4
51≤n≤105
6
7
81≤n≤1051≤i,j≤109
9
10
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; //解题思路:离散化+并查集 //离散化 int pos; int disc[N*2]; unordered_map<int,int> mp; //并查集 int fa[N*2]; struct node{ int x,y,z; }a[N]; int n; int find(int x) { return fa[x]==x?x:fa[x]=find(fa[x]); } int un(int x,int y) { return fa[find(x)]=find(y); } bool issame(int x,int y) { return find(x)==find(y); } bool solve() { cin>>n; pos=0; mp.clear(); for(int i=1;i<=n;i++) { cin>>a[i].x>>a[i].y>>a[i].z; disc[++pos]=a[i].x; disc[++pos]=a[i].y; } //离散化 sort(disc+1,disc+1+pos); int cnt=0; for(int i=1;i<=pos;i++) { int x=disc[i]; if(mp.count(x)) continue; cnt++; mp[x]=cnt; } //初始化 for(int i=1;i<=cnt;i++) { fa[i]=i; } for(int i=1;i<=n;i++) { int x=a[i].x,y=a[i].y,z=a[i].z; if(z==1) un(mp[x],mp[y]); } for(int i=1;i<=n;i++) { int x=a[i].x,y=a[i].y,z=a[i].z; if(z==0) { if(issame(mp[x],mp[y])) return false; } } return true; } int main() { int T; cin>>T; while(T--) { if(solve()) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 14:28:56

Cesium 示例集:迁徙路网特效 glsl实现

🚀 个人简介:某大型测绘遥感企业资深Webgis开发工程师,软件设计师(中级)、CSDN优质创作者 💟 作 者:柳晓黑胡椒❣️ 📝 专 栏:再识Cesium 🌈 若有帮助,还请关注 ➕ 点赞➕收藏,不行的话我再努努力💪💪💪 基于 Cesium 的迁徙路网特效 GLSL 实现 迁徙路网特效…

作者头像 李华
网站建设 2026/5/20 19:26:02

为何渴望被赞赏?过度求赞有何影响?如何建立健康评价体系?

追求他人的认可&#xff0c;本质是渴望在外部镜像中确认自我价值。这不仅是一种普遍的社会心理&#xff0c;也是许多焦虑与内耗的根源。理解“被赞赏”的驱动力&#xff0c;才能更理性地对待外界的评价&#xff0c;建立更稳固的自我内核。 为什么我们如此渴望被他人赞赏 这种渴…

作者头像 李华
网站建设 2026/5/21 11:28:02

AriaNg GUI完整指南:免费跨平台下载管理器终极解决方案

AriaNg GUI完整指南&#xff1a;免费跨平台下载管理器终极解决方案 【免费下载链接】aria-ng-gui 一个 Aria2 图形界面客户端 | An Aria2 GUI for Windows & Linux & MacOS 项目地址: https://gitcode.com/gh_mirrors/ar/aria-ng-gui AriaNg GUI是一款功能强大的…

作者头像 李华
网站建设 2026/5/21 12:52:00

macOS终极网络共享方案:HoRNDIS驱动程序完全配置指南

在移动办公日益普及的今天&#xff0c;如何将Android设备的网络快速、稳定地共享到Mac电脑上成为许多用户的迫切需求。HoRNDIS驱动程序正是解决这一痛点的专业工具&#xff0c;通过USB数据线将Android手机变身为网络设备&#xff0c;为macOS用户提供无缝的网络连接体验。 【免费…

作者头像 李华
网站建设 2026/5/20 14:28:38

3步轻松搞定!yt-dlp-gui视频下载终极指南

还在为复杂的命令行操作而烦恼吗&#xff1f;yt-dlp-gui为您带来了最简单高效的视频下载解决方案&#xff01;这款基于yt-dlp的Windows图形界面工具&#xff0c;让视频下载变得前所未有的轻松愉快。无论您是技术小白还是资深用户&#xff0c;都能在几分钟内掌握这款强大工具的使…

作者头像 李华
网站建设 2026/5/12 6:49:37

EmotiVoice能否用于博物馆导览系统?文化语境适配

EmotiVoice在博物馆导览系统中的文化语境适配探索 当观众站在一尊千年青铜器前&#xff0c;耳边响起的不再是干涩的“这件文物出土于公元前XX年”&#xff0c;而是一段低沉、庄重、仿佛穿越时空的讲述——语气中带着对古老仪式的敬畏&#xff0c;节奏间留有沉思的停顿。这样的体…

作者头像 李华