news 2026/5/1 8:02:46

洛谷 P1551 题解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
洛谷 P1551 题解

题目背景

若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。

题目描述

规定:x 和 y 是亲戚,y 和 z 是亲戚,那么 x 和 z 也是亲戚。如果 x,y 是亲戚,那么 x 的亲戚都是 y 的亲戚,y 的亲戚也都是 x 的亲戚。

输入格式

第一行:三个整数 n,m,p,(n,m,p≤5000),分别表示有 n 个人,m 个亲戚关系,询问 p 对亲戚关系。

以下 m 行:每行两个数 Mi​,Mj​,1≤Mi​, Mj​≤n,表示 Mi​ 和 Mj​ 具有亲戚关系。

接下来 p 行:每行两个数 Pi​,Pj​,询问 Pi​ 和 Pj​ 是否具有亲戚关系。

输出格式

p 行,每行一个YesNo。表示第 i 个询问的答案为“具有”或“不具有”亲戚关系。

输入输出样例

输入 #1复制

6 5 3 1 2 1 5 3 4 5 2 1 3 1 4 2 3 5 6

输出 #1复制

Yes Yes No

一道相当接近模板题的并查集。

如果我们注意到并查集是递归实现的并且具有如下形式:

int find(int n,vector<int>&a){ if(a[n]==n)return n; //找到根节点 return a[n]=find(a[n],a); //查询根节点 }

这道题就会非常简单:

只需要先将每个a[i]赋值为i,然后对于每个关系使用:(re[i].first,re[i].second对应两个人)

int _min=min(re[i].first,re[i].second); int _max=max(re[i].first,re[i].second); a[find(_max,a)]=find(_min,a);

就可以将关系联通(注意我们每次更改的是关系的根节点),随后对于查询,只要找到两人对应的根节点即可。

代码如下:

#include<bits/stdc++.h> using namespace std; int find(int n,vector<int>&a){ if(a[n]==n)return n; return a[n]=find(a[n],a); } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr);cout.tie(nullptr); int n,m,p; cin>>n>>m>>p; vector<int>a(n+1,0); vector<pair<int,int>>re(m+1); stringstream ss; for(int i=1;i<=n;i++)a[i]=i; for(int i=0;i<m;i++){ cin>>re[i].first>>re[i].second; int _min=min(re[i].first,re[i].second); int _max=max(re[i].first,re[i].second); a[find(_max,a)]=find(_min,a); } for(int i=1;i<=n;i++)find(i,a); for(int i=0;i<p;i++){ int q1,q2; cin>>q1>>q2; if(find(q1,a)==find(q2,a))ss<<"Yes"<<"\n"; else ss<<"No"<<"\n"; } cout<<ss.str(); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 1:41:28

EmotiVoice镜像部署指南:Docker一键启动超便捷

EmotiVoice镜像部署指南&#xff1a;Docker一键启动超便捷 在AI语音技术飞速发展的今天&#xff0c;用户早已不满足于“机器朗读”式的冰冷输出。从虚拟偶像到智能助手&#xff0c;从有声书生产到游戏NPC对话&#xff0c;人们期待的是有情绪、有温度、有个性的声音。然而&#…

作者头像 李华
网站建设 2026/5/1 4:55:26

2.6 DeepResearch 深度研究助手的容器化部署与测试

2.6 DeepResearch 深度研究助手的容器化部署与测试 导语:大家好,欢迎来到我们第二周的最后一讲。在过去的几天里,我们成功地从零到一构建了一个强大的多智能体研究系统——DeepResearch。它可以在我们的本地机器上出色地完成任务。但是,如何将这个强大的 AI 应用交付给最终…

作者头像 李华
网站建设 2026/5/1 7:10:29

从疑惑到清晰:Linux与Windows的核心差异

前言 作为计算机学习者或从业者&#xff0c;你是否也曾有过这些困惑&#xff1a; 为什么市面上会同时存在Linux和Windows两大主流操作系统&#xff1f;先有的哪个&#xff1f;既然已经有了第一个&#xff0c;为什么还需要第二个&#xff1f;它们的核心区别到底是什么&#xff0…

作者头像 李华
网站建设 2026/5/1 3:57:31

一篇文章带你了解Redis数据类型

前言 Redis作为高性能键值存储&#xff08;缓存/数据库&#xff09;&#xff0c;其数据类型设计是“高性能多场景适配”的核心&#xff0c;也是面试高频考点、业务开发必备技能。本文将分「核心数据类型」「拓展数据类型」两大模块&#xff0c;讲透每个类型的特点、常用命令、实…

作者头像 李华
网站建设 2026/5/1 1:56:48

3.6 线上问题排查实战:让你的 AI 服务 7x24 小时稳定运行

3.6 线上问题排查实战:让你的 AI 服务 7x24 小时稳定运行 导语:欢迎来到第三周的终极实战!我们已经成功地将“旅小智”部署到了云端。但是,部署成功只是一个新的开始。在真实的生产环境中,系统会在你意想不到的时间、以你意想不到的方式出现问题。当凌晨三点,告警短信将你…

作者头像 李华