PAT——1118 Birds in Forest 甲级
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 甲级相关推荐
- PAT甲级1118 Birds in Forest :[C++题解]并查集
文章目录 题目分析 题目链接 题目分析 来源:acwing 分析:并查集的合并和查询. 问:一张照片上的鸟如何合并?相邻的合并(笔者采用的方式)或者全合并到第一只鸟就行,遍历一遍.所有照片中的鸟,合并 ...
- 【题解】1118 Birds in Forest (25分)⭐⭐ 【并查集】
[题解]1118 Birds in Forest (25分)⭐⭐ [并查集] 题解: 简单并查集,并一下查一下就好了,没学的同学抓紧学一下 经验小结: #include<bits/stdc++. ...
- PAT题解-1118. Birds in Forest (25)-(并查集模板题)
如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...
- PAT A 1118. Birds in Forest (25)【并查集】
并查集合并 #include<iostream> using namespace std; const int MAX = 10010; int father[MAX],root[MAX] ...
- 1118. Birds in Forest (25)
并查集...要用路径压缩,不然会超时, #include<iostream> #include<string> #include<map> #include< ...
- 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 ...
- PAT 1148 Werewolf – Simple Version – 甲级
Werewolf(狼人杀) is a game in which the players are partitioned into two parties: the werewolves and th ...
- 刷PAT甲级的各题思路、细节以及遇到的问题记录
1001 A+B Format (20分) 因为一定会用到字符串,而string非常好用,但是用的时候一定要注意不能越界访问,否则会在运行时出现abort() has been called. 100 ...
- PAT甲级题目翻译+答案 AcWing(并查集)
1013 Battle Over Cities (25 分) 题意 :给图,问去掉所询问的一个点后,需要添加多少条边可以使图连通,N<1000N<1000N<1000 思路 :并查集 ...
- PAT甲级真题目录(按题型整理)(转自柳神)
转载自:https://www.liuchuo.net/archives/2502?tdsourcetag=s_pcqq_aiomsg 最短路径 1003. Emergency (25)-PAT甲级真 ...
最新文章
- Python深度学习:基于TensorFlow
- 低端没出路,请接触高端!
- hdu4503 概率
- mysql_rollback_MySQL的rollback--事务回滚
- linux远程工具自动记住密码,linux – 如何记住/缓存或指定Ansible的私钥密码
- Apache本地环境部署
- 华为突遭 Google 釜底抽薪,国产自研操作系统生态恐不可承其重!
- 微信小程序商机_微信小程序怎么用?有哪些商机?
- c++小学期大作业攻略(二)整体思路+主界面
- unity3d 射击游戏BOSS行为代码
- Julia :vscode jupyter中更新Julia kernel版本
- Springboot 下 ModelAndView 的简单使用
- 微服务网关——需求篇
- 在线购物系统-面对对象设计
- SpringBoot整合WebSocket案例
- Redis Cluster集群
- 图片信息用浏览器显示:data:image/png;base64,+图片内容
- 制作一个浪漫温馨的生日礼物送她~html+css+javascript蓝色梦幻海洋3D相册(含音乐)
- 《强化学习与最优控制》学习笔记(三):强化学习中值空间近似和策略空间近似概述
- 什么叫高内聚、低耦合?