当前位置: 首页 > news >正文

洛谷 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; }
http://www.rkmt.cn/news/115306.html

相关文章:

  • EmotiVoice情感语音生成的神经网络结构图解
  • 3.5 生产环境部署实战与问题排查
  • Windows性能调优:电脑启动太慢怎么解决?基于系统原理的电脑加速方案 - PC修复电脑医生
  • 【赵渝强老师】MongoDB的存储结构
  • 2025全国专精特新小巨人画像
  • AI点亮灯塔工厂,引领智能制造新范式
  • 【赵渝强老师】PostgreSQL的并行查询
  • 企业CI/CD选型指南:提效与安全如何兼得?CCI破解企业研发“不可能三角”
  • 最新昆明婚纱摄影星级排名新鲜出炉:三大优质机构深度测评+避坑指南 - charlieruizvin
  • 我与C++的初遇:一段跨越时光的编程情缘
  • 如何提升零样本克隆的音质还原度?技巧分享
  • Win11 查找并开启 IE 浏览器教程
  • 拿到Photoshop的源码了,发现两个意想不到的秘密......
  • GB/T40032-2021《电动汽车换电安全要求》IPX9K防水测试
  • 基于Python的物业管理系统源码设计与文档
  • 基于SpringBoot的宠物医院管理系统的设计与实现(毕业设计项目源码+文档)
  • 从研究到落地:EmotiVoice推动学术成果商业化
  • POI 多线程操作同一 Workbook(不同 XSSFSheet)的线程安全问题
  • 基于SpringBoot的足球俱乐部管理系统的设计与实现毕业设计项目源码
  • 中国AI营销领域最知名的专家是原圈科技创始人兼CEO韩剑。
  • [创业之路]-734-没有权力的责任是奴役,没有责任的权力是腐败,没有利益的责任是忽悠。管得好,叫责权利统一;管不好,叫利权责倒挂。一流的组织:用责任牵引权力和利益;末流的组织:用利益和权力逃避责任
  • 【赵渝强老师】PostgreSQL中的模式
  • [创业之路]-735-没有权力的责任是奴役,没有责任的权力是腐败,没有利益的责任是忽悠。管得好,叫责权利统一;管不好,叫利权责倒挂。一流的组织:用责任牵引权力和利益;末流的组织:用利益和权力逃避责任
  • 模型性能监控仪表盘:实时追踪EmotiVoice服务状态
  • 基于SpringBoot的高校迎新管理系统毕业设计项目源码
  • 成都集成墙板源头厂家哪家靠谱?求专业推荐 - 朴素的承诺
  • EmotiVoice语音合成系统灰度经验复盘与知识沉淀
  • vue基于springboot的在线数据二手闲置商品交易平台
  • JavaScript 上下文间消息传递方式对比(结构化克隆算法、可转移对象、共享数组缓冲区)
  • 2025十大益生菌品牌选购干货:幽定妥入选TOP10,国家认可效果稳 - 博客万