L2-007. 家庭房产

pta 家庭房产 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 … 孩子k 房产套数 总面积 其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个... 阅读详情

给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。

输入格式:

输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式给出一个人的房产:

编号 父 母 k 孩子1 … 孩子k 房产套数 总面积

其中 编号 是每个人独有的一个4位数的编号;父 和 母 分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0<=k<=5)是该人的子女的个数;孩子i是其子女的编号。

输出格式:

首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:

家庭成员的最小编号 家庭人口数 人均房产套数 人均房产面积

其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出,若有并列,则按成员编号的升序输出。

输入样例:
10
6666 5551 5552 1 7777 1 100
1234 5678 9012 1 0002 2 300
8888 -1 -1 0 1 1000
2468 0001 0004 1 2222 1 500
7777 6666 -1 0 2 300
3721 -1 -1 1 2333 2 150
9012 -1 -1 3 1236 1235 1234 1 100
1235 5678 9012 0 1 50
2222 1236 2468 2 6661 6662 1 300
2333 -1 3721 3 6661 6662 6663 1 100
输出样例:
3
8888 1 1.000 1000.000
0001 15 0.600 100.000
5551 4 0.750 100.000

解题思路:这道题虽然不难,但是太麻烦了~大致思路是两个结构体一个存放个人信息,一个存放家庭信息。运用并查集将所有人分成各个家庭,然后各种循环求和,求平均,不说了上代码,贼烦~

#include<iostream>
#include<set>
#include<algorithm>
#include<cstdio>
using namespace std;
//全都开了10000,好浪费,心疼
struct pr{  int fa;
            int ma;
            int kid[5];
            int nu;
            int area;
            }prs[10000];
struct family{int minid;
              int people;
              double Alarea;
              double Alcount;
             }f[10000]={0} ;
int  pe[10000];
bool exit1[10000];     //记录是否存在这个人             
int find1(int x);
void join(int a,int b);
bool cmp(struct family fam1,struct family fam2);

int main(void)
{int N;
    for(int i=0;i<10000;i++)
        pe[i]=i;
    fill(exit1,exit1+10000,false);
    cin>>N;
    //这个循环就把并查集完成了
    for(int i=0;i<N;i++)
    { int f,m,id,k;
      cin>>id>>f>>m;
      prs[id].fa=f;
      prs[id].ma=m;
      exit1[id]=true;
      cin>>k;
      for(int j=0;j<k;j++)
      {cin>>prs[id].kid[j];
       join(id,prs[id].kid[j]);
       exit1[prs[id].kid[j]]=true;
      }
      cin>>prs[id].nu>>prs[id].area;
      if(f!=-1)
       {join(id,f);
        exit1[f]=true;
       }
      if(m!=-1)
       {join(id,m);
        exit1[m]=true;
       }
     }
     //这里用了一个集合,不同根结点存入,集合大小就是家庭数
     set<int> s;
     for(int i=0;i<10000;i++)
        {   if(exit1[i]==true)
            s.insert(find1(i));
        }
     //将每个人的信息逐个存到家庭信息中去
     for(int i=0;i<10000;i++)
     {  if(exit1[i]==true)
         {f[find1(i)].people++;
          f[find1(i)].Alcount+=prs[i].nu;
          f[find1(i)].Alarea+=prs[i].area;
          f[find1(i)].minid=find1(i);
         }
     }
    //求平均,因为好多都是无效的,先判断这家庭是否有人口
    for(int i=0;i<10000;i++)
     { if(f[i].people!=0)
        {f[i].Alcount=f[i].Alcount/f[i].people;
        f[i].Alarea=f[i].Alarea/f[i].people;
        }
       else f[i].Alarea=-1;
     }
     sort(f,f+10000,cmp);
     cout<<s.size()<<endl;
     for(int i=0;i<s.size();i++)
      printf("%04d %d %.3f %.3f\n",f[i].minid,f[i].people,f[i].Alcount,f[i].Alarea);
  return 0;
}

int find1(int x)
{
  while(x!=pe[x])
    x=pe[x];
 return x;
}
void join(int a,int b)
{
 int x=find1(a);
 int y=find1(b);
   //这里小的节点做根,保证每个根的id都是家庭中id最小的
   if(x>y)
     pe[x]=y;
    else
     pe[y]=x;
}
bool cmp(family fam1,family fam2)
{
    if(fam1.Alarea!=fam2.Alarea)
     return fam1.Alarea>fam2.Alarea;
   else
     return fam1.minid<fam2.minid;
}
L2-007 家庭房产 L2-007 家庭房产 (25分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 … 孩子k 房产套数 总面积 其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。 输出格式: 首先在第一行输出家庭个数(所有有亲属关系的人 阅读详情

相关推荐

7-2 家庭房产 (25 分)

原题地址 模拟就完事了 #include <vector> #include<stdio.h> #include<string.h> #include <cstring> #include <list> #include <map> #include <set> #include <deque> #in...

dsrics的博客 1713

PTA——L2-007 家庭房产(带权并查集)

L2-007 家庭房产给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。输入格式:输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产:编号 父 母 k 孩子1 … 孩子k 房产套数 总面积其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。

2301_77012063的博客 1265

L2-007 家庭房产 (25 分)

  L2-007 家庭房产 (25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积 其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已...

q852092907的博客 2238

L2-007 家庭房产 (25 分) 并查集或图的遍历

题目详情 - L2-007 家庭房产 (25 分) (pintia.cn) 并查集 思路:记录家庭人数、房产数量和房产面积的思想跟算连通块一样(记得初始化),新的结点并入集合时同时该结点的属性值加入祖宗结点上去(将最小编号设为祖宗),最后轮询一遍获得祖宗(f[x] = x 点)的数量就是家庭的数量。然后结构体排序输出即可。 #include<iostream> #include<vector> #include<algorithm> #include<cs

hys__handsome的博客 455

PAT L2-007. 家庭房产 并查集的结构体合并

L2-007. 家庭房产时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。输入格式:输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式给出一个人的房产:编号 父 母 k 孩子1 … 孩子k 房产套数 总面积其中 编号 是每个人独有的一个4位数的编号;父

lixiyi的博客 501

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9618

PTA---L2-007 家庭房产(并查集)

PTA—L2-007 家庭房产 直达链接点我!!! 思路 emmm,就是一道比较多细节的并查集题目吧,其他的没有什么了 说下需要注意的几个点 1.我们不能边输入边进行合并操作,而是需要先保存下各个输入的相关家庭的信息,而只将房产数据保存至户主名下 2.当我们将二者合并时,由于题目需要输出最小编号,于是我们合并时,以最小的那个编号最为老大… 什么?你不明白老大什么意思? 请看: 比如我们开始输入2 1 3 1 4 表示2为户主,1 3 为他的爹娘,4为他的孩子 如果按照辈分存… 这样显然不是我们想要的,毕

zhaoxiy的博客 614

纯相位全息图优化算法综述

除此之外,还有许多用于减少斑点噪声的非迭代方法,例如:采用下采样掩膜的采样纯相位全息图(Sampled-Phase-only Hologram)方法、模式化相位掩膜(Patterned Phase-Only Hologram)方法、双相位方法(Double-Phase Method),以及使用非随机相位掩膜的方法(Random Phase-Free Method)等。迭代算法通常由一个对目标全息图的近似出发,经过一系列的重复操作不断优化这个近似全息图,直到该近似所得到的重建图像满足一定的误差要求;

ZhongKeWeiXing的博客 1428

PAT L2-007. 家庭房产(并查集)

题目链接: https://www.patest.cn/contests/gplt/L2-007 L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统

你误入了一个弱渣的领域 2710

开源收银系统_大型收银系统源码_OctShop

开源收银系统正成为大型连锁企业数字化转型的关键工具。相比传统闭源系统,开源方案具有成本低(年均降本60%+)、定制灵活(支持多业态协同)、自主可控等优势,能有效解决高并发、多门店数据同步等痛点。核心价值在于:1)分布式架构适配规模化扩张;2)模块化设计实现个性化开发;3)开放接口打通ERP/CRM等系统。典型案例显示,连锁商超通过源码二次开发实现库存实时同步,补货效率提升50%;餐饮集团统一多业态收银流程后会员复购率增长35%。选型需关注源码成熟度、技术兼容性和安全合规,建议采用"开源+服务商&q

OctShop全栈工程师 938

【定位模块项目实战】正态分布变换(NDT)定位及建图(依赖高精度点云地图和三维激光雷达的定位方案)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、正态分布变换(NDT)定位解决的主要问题二、正态分布变换(NDT)定位的核心思想三、NDT算法流程1.多元正态分布概念2.网格化并计算正态分布参数3.变换参数和最大似然四、使用C++实现NDT配准参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对依赖高精度地图和激光雷达的定位技术–正态分布变换(NDT)定位做个简单的介绍,具体

qq_35635374的博客 4411

PAT L2-007 家庭房产

L2-007. 家庭房产 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。输入格式:输入第一行给出一个正整数N(&lt;=1000),随后N行,每行按下列格式给出一个人的房产:编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积其中 编号 是每个人独有的一个4位数的编号;父 和 母 分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1)...

hao_994的博客 545

LeRobot 入门教程(七)数据集

LeRobot Dataset v3.0 是机器人学习数据的标准化格式,支持多模态时间序列数据和视频的统一访问。该版本通过基于文件的存储(Parquet/MP4)、关联元数据和Hub原生流式处理等新特性,显著提升了性能并降低了存储开销。文档详细介绍了格式设计、安装使用、数据记录与加载方法,以及从v2.1迁移到v3.0的步骤,特别针对大型数据集(如DROID 1.0.1)的处理提供了SLURM集群移植方案。v3.0通过优化文件组织和元数据管理,实现了更快的加载速度、更高的内存效率和更好的可扩展性。

2506_90492529的博客 2054

团体程序设计天梯赛 L2-007 家庭房产

团体程序设计天梯赛 L2-007 家庭房产 题目链接 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 … 孩子k 房产套数 总面积 其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。 输出格式: 首先在第一行输出家庭个数(

旺崽的博客 2615

QT如何使用CTK插件搭建应用程序框架?

CTK框架,QT框架,插件系统

cs821984831的博客 735

STM32G0/G4无刷电机硬件设计与FOC控制实现

无刷直流电机(BLDC)和永磁同步电机(PMSM)的矢量控制依赖于高精度电流采样、实时SVPWM调制与闭环PI调节等核心技术。其底层实现需兼顾电机本体建模、坐标变换(Clark/Park)、死区补偿及硬件资源约束。STM32G0系列凭借CORDIC协处理器与超低功耗特性,适用于成本敏感型有感FOC应用;而STM32G4集成运放、FMAC滤波器与高级定时器,可支撑高性能无感控制与多源传感融合。该技术广泛应用于机器人关节、智能云台、伺服驱动等场景,是嵌入式电机控制工程师必须掌握的工程化落地能力。

weixin_35751412的博客 121

PTA-L2-007 家庭房产 (25分)

PTA-L2-007 家庭房产 (25分) 传送门 这道题,简单并查集。就是输出处理麻烦了些许。 我们把个人的id作为数组的下标。然后进行存储,合并好之后,用set容器把每个家庭的代表的id存起来,然后相应的存入到结构体中,然后sort一下即可。 代码部分: #include <bits/stdc++.h> #define mst(a, n) memset(a, n, sizeof(a)) using namespace std; const int N = 1e4+ 10; const int

qq_44624316的博客 553

【嵌入式硬件】DRV8874电机驱动

1)N沟道H桥电机驱动;2)驱动1个双向有刷直流电机;3)2个单向有刷直流电机;4)4.5V-37V工作电压范围;5)集成电流感测和调节;6)成比例电流输出(IPROPI);7)可选电流调节(IMODE):逐周期或固定关断时间;8)支持1.8、3V、5V逻辑输入;9)集成保护:欠压、电荷泵欠压、过流保护、输出关闭、热关断、自动故障恢复。

qq_39200110的博客 4423

L2-007 家庭房产,L2-008 最长对称子串

L2-007 家庭房产 (25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 … 孩子k 房产套数 总面积 其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。 输出格式: 首先在第一行输出家庭个数(所有有亲属关系的

qq_53732811的博客 128

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PTA L2-007 家庭房产(C++ 含代码解释)

给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。

ZQR1120的博客 1107

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

L2-007 家庭房产 (25 分)

L2-007 家庭房产 (25 分) 题目 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积 其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。 输出格式: 首先在第一行输出家庭个数(所有

tcy今天长胖了吗的博客 219

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

PTA L2-007 家庭房产 (25 分) C++ AC代码 推向极端直接做路径压缩

PTA L2-007家庭房产

qq_42323056的博客 656

L2-007 家庭房产【DFS】

L2-007家庭房产 https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题意 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口...

逐梦者 519

L2-007 家庭房产 【并查集】

题目传送门 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积 其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k...

君兮月影的博客 330

PTA L2-007 家庭房产

题目 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产:编号 父 母 k 孩子1 … 孩子k 房产套数 总面积 其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数...

名字呢? 601
上一篇: L2-005. 集合相似度
下一篇: L2-008. 最长对称子串
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值