尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

洛谷 P1551 题解

洛谷 P1551 题解
📅 发布时间:2026/6/20 4:15:55

题目背景

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

题目描述

规定: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 行,每行一个Yes或No。表示第 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; }

相关新闻

  • EmotiVoice情感语音生成的神经网络结构图解
  • 3.5 生产环境部署实战与问题排查
  • Windows性能调优:电脑启动太慢怎么解决?基于系统原理的电脑加速方案 - PC修复电脑医生

最新新闻

  • 嵌入式系统性能优化:深入解析ColdFire微控制器Cache与SRAM配置实战
  • 2026年口碑好的苏州卷材 EVA/无味 EVA/EVA优质厂家汇总推荐 - 品牌宣传支持者
  • 龙虾智能体进阶实战:自定义Skill插件开发与多模型适配方案
  • TortoiseSVN实战:精准回滚Windows环境下的问题代码版本
  • 2026市面上专业的废弃输送pp防静电管生产商排行 - 品牌排行榜
  • 豆包AI不是智能助手,而是对话式信息接口

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号