PAT甲级1114. Family Property

题意:

这一次,你应该帮我们收集家族财产的数据。鉴于每个人的家庭成员和他/她自己的名字的房地产(房产)信息,我们需要知道每个家庭的规模,以及他们的房地产的平均面积和数量。

输入规格:

每个输入文件包含一个测试用例。对于每种情况,

第一行给出正整数N(<= 1000)。然后N行跟随,每个给出一个拥有庄园的人的信息,格式如下:

ID父亲母亲k Child1 ... Childk M_estate Area

其中ID是每个人唯一的4位数识别号码;父亲和母亲是这个人的父母的身份证件(如果父母已经去世了,

-1将被赋予); k(0 <= k <= 5)是这个人的子女人数;孩子是他/她的孩子的身份证; M_estate是他/她名下的房地产总数;而区域是他/她的遗产的总面积。

输出规格:

对于每种情况,

首先打印出一系列家庭(直接或间接相关的所有人在同一个家庭中被考虑)。然后以以下格式输出家庭信息:

ID M AVG_sets AVG_area

其中ID是家庭中最小的ID; M是家庭成员的总数; AVG_sets是其房地产的平均数量;

AVG_area是平均区域。平均数字必须精确至3位小数。这些家庭必须按其平均面积的降序排列,如果有领带,则按ID的升序排列。

思路:

并查集。数据太多有点乱。

ac代码:

C++

  1. // pat1114.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<string>
  7. #include<algorithm>
  8. #include<queue>
  9. #include<vector>
  10. #include<cstring>
  11. #include<stdio.h>
  12. #include<map>
  13. #include<cmath>
  14. #include<unordered_map>
  15. #include<unordered_set>
  16. using namespace std;
  17. const int maxn = 1e5 + 5;
  18. int vis[maxn];
  19. struct UF
  20. {
  21. int pre[maxn];
  22. void init()
  23. {
  24. for (int i = 0; i < maxn; i++)
  25. pre[i] = i;
  26. }
  27. int find(int x)
  28. {
  29. return pre[x] == x ? x : find(pre[x]);
  30. }
  31. void Union(int a, int b)
  32. {
  33. int x = find(a);
  34. int y = find(b);
  35. if (x == y) return;
  36. pre[max(x, y)] = min(x, y);
  37. }
  38. }uf;
  39. struct Person
  40. {
  41. int id = -1;
  42. int dad, mom;
  43. int k;
  44. int child[5];
  45. int estate;
  46. int area;
  47. }person[maxn];
  48. struct Family
  49. {
  50. int minid;
  51. int member_cnt = 0;
  52. int all_estate = 0;
  53. int all_area = 0;
  54. float avg_estate;
  55. float avg_area;
  56. bool operator<(const Family tmp)const {
  57. if (avg_area == tmp.avg_area) {
  58. return minid < tmp.minid;
  59. }
  60. else {
  61. return avg_area > tmp.avg_area;
  62. }
  63. }
  64. }family[maxn];
  65. int main()
  66. {
  67. int n, id;
  68. scanf("%d", &n);
  69. uf.init();
  70. memset(vis, 0, sizeof(vis));
  71. for (int i = 0; i < n; i++)
  72. {
  73. scanf("%d", &id);
  74. person[id].id = id;
  75. scanf("%d %d %d", &person[id].dad, &person[id].mom, &person[id].k);
  76. vis[id] = 1;
  77. if (person[id].dad != -1)
  78. {
  79. uf.Union(id, person[id].dad);
  80. vis[person[id].dad] = 1;
  81. }
  82. if (person[id].mom != -1)
  83. {
  84. uf.Union(id, person[id].mom);
  85. vis[person[id].mom] = 1;
  86. }
  87. for (int j = 0; j < person[id].k; j++)
  88. {
  89. scanf("%d", &person[id].child[j]);
  90. uf.Union(id, person[id].child[j]);
  91. vis[person[id].child[j]] = 1;
  92. }
  93. scanf("%d %d", &person[id].estate, &person[id].area);
  94. }
  95. int idArray[maxn];
  96. int cnt = 0;
  97. for (int i = 0; i < maxn; i++)
  98. {
  99. if (vis[i] == 1)
  100. {
  101. idArray[cnt++] = i;
  102. }
  103. }
  104. memset(vis, 0, sizeof(vis));
  105. int u, fa;
  106. for (int i = 0; i < cnt; i++)
  107. {
  108. u = idArray[i];
  109. fa = uf.find(u);
  110. vis[fa] = 1;
  111. family[fa].minid = fa;
  112. family[fa].member_cnt++;
  113. family[fa].all_estate += person[u].estate;
  114. family[fa].all_area += person[u].area;
  115. }
  116. int family_num = 0;
  117. for (int i = 0; i < maxn; i++)
  118. {
  119. if (vis[i] == 1)
  120. {
  121. family_num++;
  122. family[i].avg_area = (float)family[i].all_area / family[i].member_cnt;
  123. family[i].avg_estate = (float)family[i].all_estate / family[i].member_cnt;
  124. }
  125. }
  126. sort(family, family + maxn);
  127. printf("%d\n", family_num);
  128. for (int i = 0; i < family_num; i++)
  129. {
  130. printf("%04d %d %.3f %.3f\n", family[i].minid, family[i].member_cnt, family[i].avg_estate,
  131. family[i].avg_area);
  132. }
  133. return 0;
  134. }

PAT甲级1114. Family Property的更多相关文章

  1. PAT甲级——1114 Family Property (并查集)

    此文章同步发布在我的CSDN上https://blog.csdn.net/weixin_44385565/article/details/89930332 1114 Family Property ( ...

  2. pat甲级1114

    1114 Family Property(25 分) This time, you are supposed to help us collect the data for family-owned ...

  3. PAT甲级——A1114 Family Property【25】

    This time, you are supposed to help us collect the data for family-owned property. Given each person ...

  4. PAT 1114 Family Property[并查集][难]

    1114 Family Property(25 分) This time, you are supposed to help us collect the data for family-owned ...

  5. pat甲级题解(更新到1013)

    1001. A+B Format (20) 注意负数,没别的了. 用scanf来补 前导0 和 前导的空格 很方便. #include <iostream> #include <cs ...

  6. PAT甲级题解(慢慢刷中)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6102219.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. 【转载】【PAT】PAT甲级题型分类整理

    最短路径 Emergency (25)-PAT甲级真题(Dijkstra算法) Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS) Travel P ...

  8. PAT 甲级真题题解(63-120)

    2019/4/3 1063 Set Similarity n个序列分别先放进集合里去重.在询问的时候,遍历A集合中每个数,判断下该数在B集合中是否存在,统计存在个数(分子),分母就是两个集合大小减去分 ...

  9. PAT甲级目录

    树(23) 备注 1004 Counting Leaves   1020 Tree Traversals   1043 Is It a Binary Search Tree 判断BST,BST的性质 ...

随机推荐

  1. MySQL分布式集群之MyCAT(二)【转】

    在第一部分,有简单的介绍MyCAT的搭建和配置文件的基本情况,这一篇详细介绍schema的一些具体参数,以及实际作用        首先贴上自己测试用的schema文件,双引号之前的反斜杠不会消除,姑 ...

  2. 二、springcloud之熔断器hystrix

    一.背景 雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服 ...

  3. VirtualBox上安装CentOS-7(Minimal)

    Windows 10家庭中文版,VirtualBox 5.2.12,CentOS 7(Minimal版), 因为听到大家在谈论CentOS,阿里云上也有CentOS,CentOS还是Red Hat出品 ...

  4. Mysql Limit操作

    oracle : ||   mysql: contact    contact_ws 拼接   Font Size: Large | Medium | Small select * from tabl ...

  5. COLLATE CHINESE_PRC_CI_AS_WS 的含义

    排序规则:COLLATE CHINESE_PRC_CI_AS_WS 的含义 在创建数据表时,常会用到这个. 含义当中,CHINESE_prc_ 是代表中国大陆.如果是台湾,则如:Chinese_TAI ...

  6. MySQL学习笔记:limit

    MySQL支持用limit语句来设置查询的行数范围,同Hive. LIMIT a, b; a:从a+1开始: b:取b行数据: 1.取出第一行记录: ,; 2.取出第二行记录: ,; 3.取出从11开 ...

  7. 树莓派3B安装远程

    步骤1:树莓派3安装 RDP SERVER 及VNC SERVER sudo apt-get install -y tightvncserver sudo vncserver 最后才知道一定要加上VN ...

  8. overlay实现容器跨主机通信

    本节内容: Docker容器跨主机通信方案 环境信息 升级内核 安装docker 防火墙设置和开启内核转发 安装启动consul 启动Docker 创建overlay network 创建容器 测试容 ...

  9. #NodeJS 服务器基本模板

    基本server配置 cookie / session / get数据 / post数据 / 请求方法 const express=require('express'); const static=r ...

  10. 【社区公益】送《Web前端开发最佳实践》给需要的人

    算起来至今,我进入软件开发行业已经有11年之久.从最初的研究人工智能,到后来的Web开发,控件开发,直到现在纯粹的Web前端开发.虽然没有大的作品问世,但也是勤勤恳恳,踏实做事,低调做人.从来不吹牛逼 ...