题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872

题意:给定n个人的信息,包括其编号,父母以及孩子的编号,以及其名下的房产数量和房产面积,要求有多少个家族,并列出每个家族的最小编号,家庭人数,家庭人均房产数量和人均房产面积。

思路:算法部分就是简单的并查集,但数据处理等方面还挺复杂,一定要仔细。首先用个data结构体数组来存储输入的每个人的信息,用node结构体来存储每个家族的信息,其中包括该家族最小成员编号,人数,人均房产数量和人均房产面积,其中flag涌来标识是否存在,因为数据量不大,可以暴力处理,就是要注意编码细节。输入人的信息时,将他和其父母孩子合并,并使祖先的编号最小,用vis数组标记该编号是否出现。合并之后遍历n个人,将其1房产信息都加入到家族结构体中,最后还要排序,先按人均房产面积降序排列,再按编号升序排列。

AC代码:

#include<bits/stdc++.h>
using namespace std;struct data{int id,fa,ma,k,num,area;int ch[6];
}a[1005];struct node{int idm,pp,flag;double num,area;
}fam[10005];int root[10005],vis[10005],n,res;int getr(int k){if(root[k]==k) return k;else return root[k]=getr(root[k]);
}void Union(int x,int y){int xr=getr(x),yr=getr(y);if(xr<yr)root[yr]=xr;elseroot[xr]=yr;
}bool cmp(node xx,node yy){if(xx.area==yy.area)return xx.idm<yy.idm;elsereturn xx.area>yy.area;
}int main(){scanf("%d",&n);for(int i=0;i<10000;++i)root[i]=i;for(int i=0;i<n;++i){scanf("%d%d%d%d",&a[i].id,&a[i].fa,&a[i].ma,&a[i].k);for(int j=0;j<a[i].k;++j)scanf("%d",&a[i].ch[j]);scanf("%d%d",&a[i].num,&a[i].area);vis[a[i].id]=1;if(a[i].fa!=-1)vis[a[i].fa]=1,Union(a[i].id,a[i].fa);if(a[i].ma!=-1)vis[a[i].ma]=1,Union(a[i].id,a[i].ma);for(int j=0;j<a[i].k;++j)vis[a[i].ch[j]]=1,Union(a[i].id,a[i].ch[j]);}    for(int i=0;i<n;++i){int idr=getr(a[i].id);fam[idr].idm=idr;fam[idr].num+=a[i].num;fam[idr].area+=a[i].area;fam[idr].flag=1;}for(int i=0;i<10000;++i){if(vis[i]) ++fam[getr(i)].pp;if(fam[i].flag) ++res;}for(int i=0;i<10000;++i)if(fam[i].flag){fam[i].num=fam[i].num*1.0/(fam[i].pp*1.0);fam[i].area=fam[i].area*1.0/(fam[i].pp*1.0);}sort(fam,fam+10000,cmp);printf("%d\n",res);for(int i=0;i<res;++i)printf("%04d %d %.3f %.3f\n",fam[i].idm,fam[i].pp,fam[i].num,fam[i].area);return 0;
}

转载于:https://www.cnblogs.com/FrankChen831X/p/10543298.html

pta l2-7(家庭房产)相关推荐

  1. CCCC L2 007 家庭房产 并查集

    最开始看到这个题,想不到只用并查集,在某一个如果同时又两个其他家庭包括的人怎么办,所有开了一个home类,想通过Home之间的合并解决这个问题,最后由于内容过于庞大而超时. 参考网上的思路用并查集可以 ...

  2. PTA 家庭房产 (图论,暴搜)

    PTA 家庭房产 (图论,暴搜) 题目详情: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N ...

  3. C++学习之路 | PTA(天梯赛)—— L2-007 家庭房产 (25分)(带注释)(并查集)(精简)

    L2-007 家庭房产 (25分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按 ...

  4. 7-56 家庭房产 (25 分)

    7-56 家庭房产 (25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下 ...

  5. L2-007. 家庭房产

    L2-007. 家庭房产 题目链接:https://www.patest.cn/contests/gplt/L2-007 并查集 初学,看这题的时候完全没有什么好的想法,参考了@yinzm的blog用 ...

  6. 【CCCC】L2-007 家庭房产 (25分),并查集,结构统计

    problem L2-007 家庭房产 (25分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000), ...

  7. 7-11 家庭房产(25 分) 【并查集】

    7-11 家庭房产(25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列 ...

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

    给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式给出一个人的房产: ...

  9. 数据结构与算法A实验六图论---7-6 家庭房产(并查集)

    给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 ...

最新文章

  1. ttc转换ttf字体在线_R 语言画图中英文字体解决方案
  2. kettle安装部署及远程执行
  3. SAP错误问题汇总(转)
  4. 1564: Strange Class
  5. Android(IPC)进程间通讯1:详解Binder由来?
  6. android内容协调,理清Android协调布局CoordinatorLayout的摆放位置及特殊属性。
  7. 【Interfacenavigation】按钮(29)
  8. javaee怎么做到只有登录才可以进网页_java初学者,应该怎么去学习?(建议收藏)...
  9. 年龄是计数还是计量_MSA你只知道计量型和计数型?有哪些类型?分别是什么方法?...
  10. 如何创建_重庆市百科如何创建
  11. python中的作用域_python中作用域
  12. 如何利用UltraISO将系统镜像刻录到U盘上
  13. 从零开始构建 RPM 包
  14. CSS3 排版属性盒子模型 第二个模块
  15. 数列求和 (Java实现)
  16. 学生宿舍管理数据库设计(下)
  17. 阿里云 Aliplayer高级功能介绍(七):多分辨率
  18. Word控件Spire.Doc 【段落处理】教程(十五):在 C# 中为 Word 段落添加制表位
  19. 解决maven pom依赖的jar无法从私服下载问题【复制大法】
  20. 左右手坐标系与旋转正向

热门文章

  1. Oracle 好书 02 ( 安装oracle 10g软件及创建数据库 )
  2. Windows Phone 7 IEnumerableT.Select和SelectMany的区别
  3. TP、TN、FP、FN
  4. Spark配置参数优先级
  5. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)
  6. 利用SparkSQL(java版)将离线数据或实时流数据写入hive的用法及坑点
  7. java异常处理的throw和throws的区别
  8. 《LeetCode力扣练习》第55题 跳跃游戏 Java
  9. 《LeetCode力扣练习》第6题 C语言版 (做出来就行,别问我效率。。。。)
  10. idea里maven设置本地仓库报错原因