news 2026/6/8 22:37:52

洛谷 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/6/9 18:39:11

EmotiVoice语音合成引擎:打造富有情感的AI声音解决方案

EmotiVoice语音合成引擎&#xff1a;打造富有情感的AI声音解决方案 在虚拟主播直播中突然切换成“撒娇音”回应粉丝弹幕&#xff0c;有声书朗读时随着剧情推进自动从温柔低语转为紧张急促的叙述——这些曾属于科幻场景的交互体验&#xff0c;如今正通过EmotiVoice这样的新型语音…

作者头像 李华
网站建设 2026/6/9 18:40:18

2.1 Agent 开发新范式!LangGraph 从链式思维到图状态的革命

2.1 Agent 开发新范式!LangGraph 从链式思维到图状态的革命 导语:欢迎进入课程的第二周!在第一周,我们聚焦于构建和强化单个 Agent 的能力。我们学会了如何让它使用工具、拥有记忆、并遵循我们的指令。然而,当我们面对真正复杂的、需要多个角色分工协作才能完成的任务时,…

作者头像 李华
网站建设 2026/6/5 14:15:05

EmotiVoice语音合成噪音抑制后处理:提升最终输出纯净度

EmotiVoice语音合成噪音抑制后处理&#xff1a;提升最终输出纯净度 在智能语音内容爆发式增长的今天&#xff0c;用户早已不满足于“能说话”的AI语音。从虚拟偶像直播到有声书自动播讲&#xff0c;从游戏NPC互动到数字员工客服&#xff0c;人们期待的是像真人一样富有情感、自…

作者头像 李华
网站建设 2026/6/7 19:09:00

9个AI写作工具,专科生轻松搞定论文格式规范!

9个AI写作工具&#xff0c;专科生轻松搞定论文格式规范&#xff01; AI工具如何让论文写作变得轻松 对于专科生来说&#xff0c;论文写作不仅是学术能力的体现&#xff0c;更是毕业路上的一道重要关卡。而随着AI技术的不断进步&#xff0c;越来越多的AI写作工具应运而生&#x…

作者头像 李华
网站建设 2026/6/9 21:12:36

基于AI的全国蔬菜供应与价格预测PPT自动化生成方案

一、方案概述在农业数字化转型的浪潮中&#xff0c;准确预测蔬菜价格波动和优化供应管理变得愈发重要。为应对这一挑战&#xff0c;本文将系统阐述如何构建一个基于人工智能技术的全国蔬菜供应与价格预测PPT自动化生成方案。该综合解决方案通过整合多源农业数据&#xff0c;运用…

作者头像 李华
网站建设 2026/6/5 15:40:45

【收藏必备】Transformer原理与实现:大模型开发者必学核心知识

简介 Transfromer架构在 2017 年由 Google 提出的一种基于自注意力机制的深度神经网络架构&#xff0c;目前Transformer已经成为了NLP领域的基础架构。基于Transformer架构也衍生出了著名的Transformer模型&#xff0c;例如GPT(The Generative Pretrained Transformer)、BERT(B…

作者头像 李华