PREV-54 试题 历届试题 合根植物

2024-03-15 02:38
文章标签 植物 试题 历届 54 prev 合根

本文主要是介绍PREV-54 试题 历届试题 合根植物,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接 PREV-54 试题 历届试题 合根植物

题目描述

资源限制
时间限制:2.0s 内存限制:256.0MB

问题描述

w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。

这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。

如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?

输入格式
  第一行,两个整数m,n,用空格分开,表示格子的行数、列数(1<m,n<1000)。
  接下来一行,一个整数k,表示下面还有k行数据(0<k<100000)
  接下来k行,第行两个整数a,b,表示编号为a的小格子和编号为b的小格子合根了。

格子的编号一行一行,从上到下,从左到右编号。
  比如:5 * 4 的小格子,编号:
  1 2 3 4
  5 6 7 8
  9 10 11 12
  13 14 15 16
  17 18 19 20
样例输入
5 4
16
2 3
1 5
5 9
4 8
7 8
9 10
10 11
11 12
10 14
12 16
14 18
17 18
15 19
19 20
9 13
13 17

样例输出
5

解题思路

并查集模板,稍做一点修改。

程序代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,kk,x,y;
int fa[1000005],ans;
inline int read() {int x=0,w=1;char ch=0;while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') w=-1,ch=getchar();while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch-48),ch=getchar();return x*w;
}
inline int cmp(int a,int b) {return a<b;}
int gf(int x) {return x==fa[x]?x:fa[x]=gf(fa[x]);}
//找爸爸
inline void union1(int a,int b) {int f1=gf(a),f2=gf(b);if(f1!=f2){fa[f1]=f2;}
}//并查集
int main() {cin>>m>>n;cin>>kk;for(int i=1;i<=n*m;++i) fa[i]=i;for(int i=1;i<=kk;++i) {//把有关联的和根植物放在一个集合内cin>>x>>y;union1(y,x);}for(int i=1;i<=n*m;++i) {int xx=gf(i);}//在向上寻找根源,并且都将自己的父亲更新为祖父ans=1;sort(1+fa,1+fa+n*m,cmp);//排序for(int i=2;i<=n*m;++i)if(fa[i]!=fa[i-1]) ans++;//比较不同的祖父有多少个cout<<ans<<endl;return 0;
} 

疑问

我把那个递归版的找爸爸改为非递归版之后就不行了,不知道为何,非递归版找爸爸好像也没问题。以下是非递归版程序。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n,m,kk,x,y;
int fa[1000005],ans;
inline int read() {int x=0,w=1;char ch=0;while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();if(ch=='-') w=-1,ch=getchar();while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch-48),ch=getchar();return x*w;
}
inline int cmp(int a,int b) {return a<b;}
//int gf(int x) {return x==fa[x]?x:fa[x]=gf(fa[x]);}
inline int gf(int x) {//非递归版找爸爸int u=x,v=x;while(u!=fa[u]) u=fa[u];while(v!=fa[v]) {v=fa[v];fa[v]=u; }return u;
} /*inline int gf(int x){int p=x;while(p!=fa[p])p=fa[p];while(x!=fa[x]){x=fa[x];fa[x]=p;}return p;
}*/
inline void union1(int a,int b) {int f1=gf(a),f2=gf(b);if(f1!=f2){fa[f1]=f2;}
}
int main() {cin>>m>>n;cin>>kk;for(int i=1;i<=n*m;++i) fa[i]=i;for(int i=1;i<=kk;++i) {cin>>x>>y;union1(y,x);}for(int i=1;i<=n*m;++i) {int xx=gf(i);}ans=1;sort(1+fa,1+fa+n*m,cmp);for(int i=2;i<=n*m;++i)if(fa[i]!=fa[i-1]) ans++;cout<<ans<<endl;return 0;
} 

这篇关于PREV-54 试题 历届试题 合根植物的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/810530

相关文章

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [

认知杂谈54

I I 内容摘要: 这篇内容主要有以下几个要点:首先,沟通不在一个调时可学习人际交往心理学知识、线上课程及关注名师来改善。其次,挑房子、工作、搭档和人生伴侣要谨慎,找心灵相通能共同进步的人。再者,远离负能量的人,多跟积极向上的人相处攒正能量。然后,人生如爬山,要专注自身步伐,不与他人比较,坚持目标,可通过看《微习惯》、用专注 APP、参加训练营提升专注力和自律能力。此外,别瞎操心他人,每个人有自

广东省特殊食品生产试题分享

1.食品污染是指在各种条件下,导致有毒有害物质进入到食物中,造成以下哪项发生转变的过程。(D) A.食品的安全性 B.食品的养分性 C.食品的感官性状 D.以上都是 2.食品污染物是指(D) A.生物性污染物 B.化学性污染物 C.物理性污染物 D.以上都是 3.关于菌落总数的表达,错误的选项是(A) A.反映食品对人体安康的危害程度 B.是食品清洁状态的标志 C.推测食品的耐保藏性 D.指1g检

【时时三省】c语言例题----华为机试题< 查找组成一个偶数最接近的两个素数>

山不在高,有仙则名。水不在深,有龙则灵。                                                                         ----CSDN 时时三省 1,题目 HJ60 查找组成一个偶数最接近的两个素数 描述 任意一个偶数(大于2)都可以由2个素数组成,组成偶数的2个素数有很多种情况,本题目要求输出组成指定偶数的两个

十一 面向对象技术(考点篇)试题

A ;D,D。实际答案:C;D,D 考的很偏了。UML 2.0基础结构的设计目标是定义一个元语言的核心 UML 2.0 【InfrastructureLibrary】,通过对此核心的复用,除了可以定义一个自展的UML元模型,也可以 InfrastructureLibrary UML 定义其他元模型,包括 MOF和CWM(Common Warehouse Model,公共仓库模型)。

【时时三省】c语言例题----华为机试题<等差数列>。

目录 1,题目 描述 输入描述: 输出描述: 示例1 示例2 2,代码 山不在高,有仙则名。水不在深,有龙则灵。                                                                         ----CSDN 时时三省 1,题目 HJ100 等差数列 描述 等差数列 2,5,8,11,14。。。。

特种设备作业气瓶作业试题附答案

1.液化石油气瓶检验完毕后,逐只进行抽真空其主要目的是()。 A、提高气体的纯度 B、防止形成爆鸣气体 C、验证检验质量 D、提高充装速度 答案:B 2.无“()”监督检验钢印标记的气瓶严禁充装。 A、SC B、CC C、TS D、SS 答案:C 3.特种气瓶是指()。 A、盛装液化石油气的钢瓶 B、盛装混合气体的无缝气瓶 C、氧气瓶 D、车用气瓶 答案:D 4.天然气贮气井管不宜建在碎石、

【时时三省】c语言例题----华为机试题<等差数列>

山不在高,有仙则名。水不在深,有龙则灵。                                                                         ----CSDN 时时三省 1,题目 HJ100 等差数列 描述 等差数列 2,5,8,11,14。。。。 (从 2 开始的 3 为公差的等差数列) 输出求等差数列前n项和 数据范围: 1≤n≤

基于Java+SpringBoot+Vue的植物健康系统

基于Java+SpringBoot+Vue的植物健康系统 前言 ✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅 某信 gzh 搜索【智能编程小助手】获取项目源码🍅 哈喽兄弟们,好久不见哦~ 最近整理了一下之前写过的一些小项目/毕