news 2026/5/21 10:31:22

洛谷 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/20 14:41:21

EmotiVoice在直播带货虚拟主播中的实时配音应用

EmotiVoice在直播带货虚拟主播中的实时配音应用 在今天的电商直播间里&#xff0c;一个“人”正声情并茂地介绍着某款面膜的神奇效果——语气激动、语速加快&#xff0c;仿佛下一秒库存就要清空。可你有没有想过&#xff0c;这个声音的主人可能从未开口说过一句话&#xff1f;它…

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

audio drv

audio 相关知识 “模拟输出”和“多声道输出”是音频领域的两个核心概念&#xff0c;分别对应信号类型和声道数量两个不同维度&#xff0c;下面通俗解释&#xff1a; 一、模拟输出&#xff1a;音频信号的“传输形式” 模拟输出是指音频设备&#xff08;如声卡、音箱&#xff09…

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

GEO优化数据统计系统DeepAnaX系统详细介绍:打造AI时代的企业数据智能中枢

在当前数字化浪潮中&#xff0c;企业面临的最大挑战已不是数据获取&#xff0c;而是如何从庞杂的AI交互数据中提取有价值的信息。随着用户越来越多地通过DeepSeek、文心一言、通义千问等智能平台进行消费决策&#xff0c;品牌在这些数字对话中的表现变得至关重要。小脉传媒凭借…

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

EmotiVoice语音中断问题解决方法汇总(持续更新)

EmotiVoice语音中断问题解决方法汇总&#xff08;持续更新&#xff09; 在虚拟主播实时互动、游戏NPC智能对话和有声书自动化生成等场景中&#xff0c;语音合成的流畅性直接决定了用户体验的“真实感”。然而&#xff0c;许多开发者在使用开源多情感TTS引擎 EmotiVoice 时&…

作者头像 李华
网站建设 2026/5/15 23:59:44

2.2 保姆级教程:手把手带你构建第一个 LangGraph 应用

2.2 保姆级教程:手把手带你构建第一个 LangGraph 应用 导语:在上一讲中,我们理解了 LangGraph 的革命性思想——用“图”来编排 Agent。理论总是让人兴奋,但真正的掌握源于实践。本篇文章将是一份“保姆级”的教程,我们将暂时抛开复杂的理论,从零开始,手把手、一步步地带…

作者头像 李华