1118 Birds in Forest

  • 题目
  • 题意
  • 代码解析
  • AC代码
  • 参考

题目

https://pintia.cn/problem-sets/994805342720868352/problems/994805354108403712

题意

一幅画里的鸟都是同一棵树上的,输出树和鸟的数量,并判断给定的两只鸟是否在同一棵树上

代码解析

本题运用了并查集,但有以下几点需要注意:

首先我需要解释一下这行代码:else return pre[x]=find(pre[x]);
这句是先把find到的x赋值给pre[x]的,查找路径上的每个点,下一次找的时候,就能直接找到终点了;再解释一下就是因为此函数找到根节点就返回,所以所有的节点在递归的赋值中最终都指向了根节点,为后续的Find节约了时间

其次是这行代码:int t=find(i);,如果两幅画有重合部分,那这两幅画的鸟应该都属于同一颗树,这行代码就是把同一棵树的子树合并起来(必须有)

最后,测试点给出的1到某个整数的节点并不一定是连续的,比如有可能是1 2 3 6 8,就跳过了4 5 7,所以后面的判断的基础就是这个数字要存在(vis[i])。虽然题目中有continuously,但不加vis好像就是错的,还是加一下比较好

AC代码

#include<bits/stdc++.h>
using namespace std;
const int maxn=10005;
int pre[maxn];
unordered_map<int,int> vis;
int find(int x)
{if(x==pre[x]) return x;else return pre[x]=find(pre[x]);//路径压缩
}
void combine(int a,int b)
{int x=find(a),y=find(b);if(x!=y) pre[y]=x;
}
int main()
{int n,m,k,x,y;for(int i=1;i<=maxn;i++) pre[i]=i;cin>>n;while(n--){cin>>m>>x;vis[x]=1;for(int i=0;i<m-1;i++){cin>>y;vis[y]=1;combine(x,y);  }   } int cnt1=0,cnt2=0;for(int i=1;i<=maxn;i++){if(vis[i]){cnt2++;int t=find(i);//这步必须有,这是为了合并同一棵树的子树 }}for(int i=1;i<=maxn;i++){if(vis[i]){if(pre[i]==i) cnt1++;}}cout<<cnt1<<" "<<cnt2<<endl;cin>>k;while(k--){cin>>x>>y;if(find(x)==find(y)) cout<<"Yes"<<endl;else cout<<"No"<<endl; }
}

参考

1118. Birds in Forest (25)-PAT甲级真题(并查集)

PAT——1118 Birds in Forest 甲级相关推荐

  1. PAT甲级1118 Birds in Forest :[C++题解]并查集

    文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:并查集的合并和查询. 问:一张照片上的鸟如何合并?相邻的合并(笔者采用的方式)或者全合并到第一只鸟就行,遍历一遍.所有照片中的鸟,合并 ...

  2. 【题解】1118 Birds in Forest (25分)⭐⭐ 【并查集】

    [题解]1118 Birds in Forest (25分)⭐⭐ [并查集] 题解: 简单并查集,并一下查一下就好了,没学的同学抓紧学一下 经验小结: #include<bits/stdc++. ...

  3. PAT题解-1118. Birds in Forest (25)-(并查集模板题)

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...

  4. PAT A 1118. Birds in Forest (25)【并查集】

    并查集合并 #include<iostream> using namespace std; const int MAX = 10010; int father[MAX],root[MAX] ...

  5. 1118. Birds in Forest (25)

    并查集...要用路径压缩,不然会超时, #include<iostream> #include<string> #include<map> #include< ...

  6. PAT 1153 Decode Registration Card of PAT (25 分)- 甲级

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  7. PAT 1148 Werewolf – Simple Version – 甲级

    Werewolf(狼人杀) is a game in which the players are partitioned into two parties: the werewolves and th ...

  8. 刷PAT甲级的各题思路、细节以及遇到的问题记录

    1001 A+B Format (20分) 因为一定会用到字符串,而string非常好用,但是用的时候一定要注意不能越界访问,否则会在运行时出现abort() has been called. 100 ...

  9. PAT甲级题目翻译+答案 AcWing(并查集)

    1013 Battle Over Cities (25 分) 题意 :给图,问去掉所询问的一个点后,需要添加多少条边可以使图连通,N<1000N<1000N<1000 思路 :并查集 ...

  10. PAT甲级真题目录(按题型整理)(转自柳神)

    转载自:https://www.liuchuo.net/archives/2502?tdsourcetag=s_pcqq_aiomsg 最短路径 1003. Emergency (25)-PAT甲级真 ...

最新文章

  1. Python深度学习:基于TensorFlow
  2. 低端没出路,请接触高端!
  3. hdu4503 概率
  4. mysql_rollback_MySQL的rollback--事务回滚
  5. linux远程工具自动记住密码,linux – 如何记住/缓存或指定Ansible的私钥密码
  6. Apache本地环境部署
  7. 华为突遭 Google 釜底抽薪,国产自研操作系统生态恐不可承其重!
  8. 微信小程序商机_微信小程序怎么用?有哪些商机?
  9. c++小学期大作业攻略(二)整体思路+主界面
  10. unity3d 射击游戏BOSS行为代码
  11. Julia :vscode jupyter中更新Julia kernel版本
  12. Springboot 下 ModelAndView 的简单使用
  13. 微服务网关——需求篇
  14. 在线购物系统-面对对象设计
  15. SpringBoot整合WebSocket案例
  16. Redis Cluster集群
  17. 图片信息用浏览器显示:data:image/png;base64,+图片内容
  18. 制作一个浪漫温馨的生日礼物送她~html+css+javascript蓝色梦幻海洋3D相册(含音乐)
  19. 《强化学习与最优控制》学习笔记(三):强化学习中值空间近似和策略空间近似概述
  20. 什么叫高内聚、低耦合?

热门文章

  1. 2018-8-10-win10-uwp-如何开始写-uwp-程序
  2. 冲击港交所:百果园书写水果连锁运营默示录
  3. python画喜羊羊_PYTHON养成日记 DAY-8
  4. 同步电机模型的MATLAB仿真模型
  5. 苹果各版本手机更换电池的视频
  6. 线性代数的那些事(二)行列式与逆
  7. 基于rfid的毕业设计题目50例
  8. Python之You-Get库学习
  9. Android技术知识点:如何向 TextView 添加字体
  10. 在注册表里查找classid