1362:家庭问题(family)

news2025/1/19 16:57:15

1362:家庭问题(family)


时间限制: 1000 ms         内存限制: 65536 KB
提交数: 6732     通过数: 3529

【题目描述】

有n个人,编号为1,2,……n,另外还知道存在K个关系。一个关系的表达为二元组(α,β)形式,表示α,β为同一家庭的成员。

当n,k和k个关系给出之后,求出其中共有多少个家庭、最大的家庭中有多少人?

例如:n=6,k=3,三个关系为(1,2),(1,3),(4,5)

此时,6个人组成三个家庭,即:{1,2,3}为一个家庭,{4,5}为一个家庭,{6}单独为一个家庭,第一个家庭的人数为最多。

【输入】

第一行为n,k二个整数(1≤n≤100)(用空格分隔);

接下来的k行,每行二个整数(用空格分隔)表示关系。

【输出】

二个整数(分别表示家庭个数和最大家庭人数)。

【输入样例】

6  3
1  2
1  3
4  5

【输出样例】

3 3

闲话:这道题说实话我当时学队列时没做出来这道题,后来学了并查集才做出来(说实话我不知道这道题为什么被放在队列的分类里)


并查集模板

join函数:

void join(int p,int q)
{
	int fp = fin(p),fq = fin(q);
	if(fp != fq) fa[fq] = fp;
}

fin函数:

int fin(int k)
{
	if(k == fa[k]) return k;
	return fa[k] = fin(fa[k]);
}

 思路:这道题要求输出家庭个数和最大家庭人数,家庭个数很简单,构造好并查集后直接数数有多少人的老大是他自己就知道了。可最大家庭人数该怎么求呢?我也是这里掉了几次坑。我的做法是先把每个人的最牛boss的编号存储在fa[i]中,再排序,然后判断,如果第i个人的最大boss==第i - 1个人的最大boss则说明出现了一个新家庭,把rs与用来数前一个家庭有几人的变量s取最大值,然后将s初始化为1,否则s++。


坑点:最后还需要

rs = max(rs,s);

!因为如果只有 1个家庭,则数最大家庭人数时根据前面的逻辑,fa[i]会一直等于fa[i - 1],此时就会输出1。不行可以注释掉这一行代码试试下面的样例

 10 10
  1 2
  1 3
  3 4
  2 5
  3 2
  3 6
  7 8
  7 9
  8 10
  7 2

我前面就是因为没有这一行代码而 


代码:

#include <bits/stdc++.h>
using namespace std;
int s = 1,n,m,z,x,y,fa[100001],l,gs,rs;
int fin(int k)
{
	if(k == fa[k]) return k;
	return fa[k] = fin(fa[k]);
}
void join(int p,int q)
{
	int fp = fin(p),fq = fin(q);
	if(fp != fq) fa[fq] = fp;
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i = 1;i <= n;i++) fa[i] = i;
	while(m--)
	{
		scanf("%d%d",&x,&y);
		join(x,y);
    }
	for(int i = 1;i <= n;i++)
	{
	  if(fa[i] == i) gs++;
	  fa[i] = fin(i);
	}
    sort(fa + 1,fa + 1 + n);
	//for(int i = 1;i <= n;i++) cout<<fa[i]<<" ";
	for(int i = 1;i <= n;i++)
	  if(fa[i] == fa[i - 1]) s++;
      else
	  {
	    rs = max(rs,s);
	    s = 1;
	  }
    rs = max(rs,s);
    printf("%d %d",gs,rs);
	return 0;
}
/*
  10 10
  1 2
  1 3
  3 4
  2 5
  3 2
  3 6
  7 8
  7 9
  8 10
  7 2
 */

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/106202.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GBK编码的理解

1、我们学程序的时候&#xff0c;所熟知的ASCII码&#xff0c;就是一种编码方式 计算机底层&#xff0c;就只认识0和1. 举个例子&#xff0c;以3bit为例&#xff1a; 所以&#xff0c;如果是000的话&#xff0c;可以对应数字0 如果是001的话&#xff0c;可以对应数字1 。。…

非零基础自学Golang 第13章 并发与通道 13.4 select 13.5 小结

非零基础自学Golang 文章目录非零基础自学Golang第13章 并发与通道13.4 select13.4.1 select作用13.4.2 超时13.4.3 死锁13.5 小结第13章 并发与通道 13.4 select Go语言中&#xff0c;通过关键字select可以监听channel上的数据流动。 select的用法和switch非常相似&#xf…

Python中的基本数据类型

文章目录前言一、字符串类型字符串表示方法二、数字类型1. 整数2.浮点数3.复数三、布尔类型总结前言 我们一般在电脑中存储的数据有多种数据类型。比如下图这张员工工资表&#xff1a; 表中员工姓名可以用字符串类型存储&#xff08;比如"李世民"、“侯君集”&#…

Hadoop学习----HDFS

文件系统 文件系统&#xff1a;是一种存储和组织数据的方法&#xff0c;实现数据的存储、分级组织、访问和获取等操作&#xff0c;使得用户对文件访问和查找变得容易。文件系统使用树形目录的抽象逻辑概念代替了硬盘等物理设备使用数据块的概念&#xff0c;用户不必关心数据底…

实验三 进程的互斥与同步

文章目录一、 实验目的二、 实验原理三、实验内容四、我的代码内容和现象1、philosopher12、philosopher2这个程序不会发生死锁&#xff0c;因为五、课后习题&#xff1a;1.什么是死锁&#xff1f;产生死锁的原因和必要条件是什么&#xff1f;2.实验中给出的伪代码流程&#xf…

Problem Set 3

1Lagrange Duality Formulate the Lagrange dual problem of the following linear programming prob-lem min cT rs.t.Ax 二b where a ∈R is variable,c ∈ R"&#xff0c;A ∈Rkn, b ∈ Rk. 解&#xff1a;设拉格朗日函数为L(x,λ)cTxλT(Ax−b)\mathcal{L}(x,\lambda)…

第十七章 webpack5项目搭建Vue-Cli(开发模式)

step1–创建项目目录 创建一个目录用来搭建vue-cli的项目 mkdir vue-cli cd vue-clistep2–初始化项目 初始化项目&#xff0c;生成一个package.json文件 npm init -ystep3–编写vue-cli的开发模式配置 新建目录 / |-config | |--webpack.dev.js | |--webpack.prod.js我…

USB TO SPI(上海同旺电子)调试器调试25LC020A

所需设备&#xff1a; 1、USB TO SPI(上海同旺电子)&#xff1b; 2、25LC020A 2Kb 2.5V SPI Serial EEPROM; Microchip 25LC020A 是一款 2 Kb 串行 EEPROM&#xff0c;采用行业标准串行外设接口 (SPI) 兼容串行总线。 该器件被组织为一个 256 x 8 位块&#xff0c;并针对消…

Java安全--CC7

在学CC7的时候我有这么几个疑问 1.为什么要两个LazyMap 2.hashCode那一步怎么计算的 3.为什么要remove yy 4.为什么put两个 我们可以先看一下CC7的链子是怎么走的: 其实分析链子还是从命令执行走到readObject比较好理解&#xff0c;虽然比较麻烦&#xff0c;比较繁琐&#xff0…

机器人机械臂运动学——逆运动学解算

1.情景概述 假设最一般的情况&#xff0c;我们的机械臂有六个自由度&#xff0c;那么从初始状态想要变化到目标的状态&#xff0c;一般情况下我们至少需要进行六次的变换&#xff0c;而这六次变换的矩阵参数隐含在整体的变换矩阵中。 根据之前的知识&#xff0c;左上角的3*3代表…

m基于隐马尔科夫模型(HMM)的手机用户行为预测(MMUB)算法matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 隐马尔可夫模型&#xff08;Hidden Markov Model&#xff0c;HMM&#xff09;是一种统计模型&#xff0c;广泛应用在语音识别&#xff0c;词性自动标注&#xff0c;音字转换&#xff0c;概率文法…

R语言中的Nelson-Siegel模型在汇率预测的应用

这篇文章的目的是指导读者逐步使用R编程语言实现Nelson-Siegel模型的步骤。 最近我们被客户要求撰写关于Nelson-Siegel模型的研究报告&#xff0c;包括一些图形和统计输出。 您可能已经知道&#xff0c;估计利率期限结构是任何资产定价的关键&#xff0c;因此对投资者和政策制…

5G无线技术基础自学系列 | 基于Massive MIMO的场景化波束优化

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 前面内容提到&#xff0c; 5G中引入了M…

机器人机械臂运动学——运动学正向解算

本博客内容参考台湾大学_林沛群教授_机器人学的课程内容 1.相对运动关系的描述方法 假设有现在这样的一个情景&#xff0c;从左到右有三个转轴&#xff0c;转轴本身可以转动&#xff0c;也可以沿着轴线上下平动&#xff0c;那么我们如何描述其中的运动学关系及其位置关系呢&am…

Linux Red Hat 8.0 cat、cut、sed、tail命令

1.cat&#xff1a; 在终端设备上显示文件内容 常用选项&#xff1a; -n 显示行数&#xff08;空格有编号&#xff09; -b 显示行数&#xff08;空格没有编号&#xff09; 命令格式&#xff1a;cat 选项 文件 特殊用法tac&#xff1a;倒着显示内容 配合重定向使用 查看 test1…

DPDK 多进程

DPDK库里是支持多进程和多线程&#xff0c;本文主要总结多进程的相关的操作。 DPDK多进程使用的关键启动参数&#xff1a; --proc-type&#xff1a;指定一个dpdk进程是主进程还是副进程&#xff08;参数值就用上面的primary或是secondary&#xff0c;或者是auto&#xff09;-…

【Bio】基础生物学 - 五个重要官能团 five important functional group

文章目录1. 羟qiǎng基&#xff08;hydroxyl&#xff09;2. 羧suō基&#xff08;carboxyl&#xff09;3. 氨基&#xff08;amino&#xff09;4. 磷酸盐&#xff08;phosphate&#xff09;5. 巯基&#xff08;sulfhydryl&#xff09;1. 羟qiǎng基&#xff08;hydroxyl&#xf…

最新进展 | Android 自定义机器学习堆栈

作者 / Android 机器学习平台团队相较于服务器端机器学习 (ML)&#xff0c;设备端机器学习有其独特的优势&#xff0c;如支持离线使用、延迟更低、隐私性更高和推理成本更低&#xff0c;因此 Android 中设备端机器学习的使用迅速增长。在构建基于设备端 ML 的功能时&#xff0c…

Android基于perfetto分析native内存泄露

官方文档(可在Chome直接翻译) https://perfetto.dev/docs/data-sources/native-heap-profiler 示例 raw-trace 资源地址 https://download.csdn.net/download/CSqingchen/87321798 本文示例是windows&#xff0c;这里使用了python工具&#xff0c;在Linux和mac同样适用 首先安装…

胡凡 《算法笔记》 上机实战训练指南 3.1 简单模拟

胡凡 《算法笔记》 上机实战训练指南 3.1 持续更新中 , 菜鸡的刷题笔记… 大学到现在了还没咋好好刷过题&#xff0c;该push自己了… 文章目录胡凡 《算法笔记》 上机实战训练指南 3.13.1 简单模拟【PAT B1001】害死人不偿命的&#xff08;3n1&#xff09;猜想【PAT B1032】挖掘…