This time, you are supposed to help us collect the data for family-owned property. Given each person's family members, and the estate(房产)info under his/her own name, we need to know the size of each family, and the average area and number of sets of their real estate.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (<=1000). Then N lines follow, each gives the infomation of a person who owns estate in the format:

ID Father Mother k Child1 ... Childk M_estate Area

where ID is a unique 4-digit identification number for each person; Father and Mother are the ID's of this person's parents (if a parent has passed away, -1 will be given instead); k (0<=k<=5) is the number of children of this person; Childi's are the ID's of his/her children; M_estate is the total number of sets of the real estate under his/her name; and Area is the total area of his/her estate.

Output Specification:

For each case, first print in a line the number of families (all the people that are related directly or indirectly are considered in the same family). Then output the family info in the format:

ID M AVG_sets AVG_area

where ID is the smallest ID in the family; M is the total number of family members; AVG_sets is the average number of sets of their real estate; and AVG_area is the average area. The average numbers must be accurate up to 3 decimal places. The families must be given in descending order of their average areas, and in ascending order of the ID’s if there is a tie.

Sample Input:

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

Sample Output:

3
8888 1 1.000 1000.000
0001 15 0.600 100.000
5551 4 0.750 100.000

题目大意:给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:家庭成员的最小编号 家庭人口数 人均房产套数 人均房产面积。其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出,若有并列,则按成员编号的升序输出

分析:用并查集。分别用两个结构体数组,一个data用来接收数据,接收的时候顺便实现了并查集的操作union,另一个数组ans用来输出最后的答案,因为要计算家庭人数,所以用visit标记所有出现过的结点,对于每个结点的父结点,people++统计人数。标记flag == true,计算true的个数cnt就可以知道一共有多少个家庭。排序后输出前cnt个就是所求答案~~

#include <cstdio>
#include <algorithm>
using namespace std;
struct DATA {int id, fid, mid, num, area;int cid[10];
}data[1005];
struct node {int id, people;double num, area;bool flag = false;
}ans[10000];
int father[10000];
bool visit[10000];
int find(int x) {while(x != father[x])x = father[x];return x;
}
void Union(int a, int b) {int faA = find(a);int faB = find(b);if(faA > faB)father[faA] = faB;else if(faA < faB)father[faB] = faA;
}
int cmp1(node a, node b) {if(a.area != b.area)return a.area > b.area;elsereturn a.id < b.id;
}
int main() {int n, k, cnt = 0;scanf("%d", &n);for(int i = 0; i < 10000; i++)father[i] = i;for(int i = 0; i < n; i++) {scanf("%d %d %d %d", &data[i].id, &data[i].fid, &data[i].mid, &k);visit[data[i].id] = true;if(data[i].fid != -1) {visit[data[i].fid] = true;Union(data[i].fid, data[i].id);}if(data[i].mid != -1) {visit[data[i].mid] = true;Union(data[i].mid, data[i].id);}for(int j = 0; j < k; j++) {scanf("%d", &data[i].cid[j]);visit[data[i].cid[j]] = true;Union(data[i].cid[j], data[i].id);}scanf("%d %d", &data[i].num, &data[i].area);}for(int i = 0; i < n; i++) {int id = find(data[i].id);ans[id].id = id;ans[id].num += data[i].num;ans[id].area += data[i].area;ans[id].flag = true;}for(int i = 0; i < 10000; i++) {if(visit[i])ans[find(i)].people++;if(ans[i].flag)cnt++;}for(int i = 0; i < 10000; i++) {if(ans[i].flag) {ans[i].num = (double)(ans[i].num * 1.0 / ans[i].people);ans[i].area = (double)(ans[i].area * 1.0 / ans[i].people);}}sort(ans, ans + 10000, cmp1);printf("%d\n", cnt);for(int i = 0; i < cnt; i++)printf("%04d %d %.3f %.3f\n", ans[i].id, ans[i].people, ans[i].num, ans[i].area);return 0;
}

1114. Family Property (25)-PAT甲级真题(并查集)相关推荐

  1. 1020. Tree Traversals (25) PAT甲级真题

    之前我看了这道题,实在是看不懂网上的解题答案,他们的具体思路基本上就是通过后续遍历和中序遍历,直接推出层次遍历. 我苦思冥想了半天,是在没看懂这种思路,于是想了一个笨点的但是也比较好理解的思路,通过后 ...

  2. 1078. Hashing (25)-PAT甲级真题

    1078. Hashing (25) The task of this problem is simple: insert a sequence of distinct positive intege ...

  3. 1040. Longest Symmetric String (25)-PAT甲级真题

    Given a string, you are supposed to output the length of the longest symmetric sub-string. For examp ...

  4. 1006. Sign In and Sign Out (25)-PAT甲级真题

    At the beginning of every day, the first person who signs in the computer room will unlock the door, ...

  5. 1085. Perfect Sequence (25)-PAT甲级真题

    Given a sequence of positive integers and another positive integer p. The sequence is said to be a & ...

  6. 1121. Damn Single (25)-PAT甲级真题

    "Damn Single (单身狗)" is the Chinese nickname for someone who is being single. You are suppo ...

  7. 1090. Highest Price in Supply Chain (25)-PAT甲级真题

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  8. 1106. Lowest Price in Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)

    A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...

  9. 1102. Invert a Binary Tree (25)-PAT甲级真题

    The following is from Max Howell @twitter: Google: 90% of our engineers use the software you wrote ( ...

最新文章

  1. CF803C Maximal GCD
  2. 洛谷 P2596 [ZJOI2006]书架 (splay)
  3. Android 自定义View消除锯齿实现图片旋转,添加边框及文字说明
  4. 产品经理应该干些啥?
  5. Simulink之绝缘栅双极型晶体管(IGBT)
  6. iOS开发应用结构化资源储备
  7. 福布斯评选 8 位 AI 风云女性,李飞飞、Coursera 创始人在列
  8. 「Python」conda与pip升级所有的包
  9. 数据结构基础温故-5.图(上):图的基本概念
  10. python 学习笔记 常用模块(五)
  11. 转载:Xshell使用教程
  12. 十、cut ,sort,wc,unip,tee,tr,split 命令
  13. 张一鸣:我的大学四年收获及工作感悟
  14. 各大浏览器的内核分别是什么?
  15. 老毛桃发帖子 去广告
  16. 医院预算目标分解公式
  17. Java POST JSON 数据处理异常 (code 160)): was expecting double-quote to start field name
  18. 一度智信:如何提高自己的电商店铺权重
  19. 矢量点积与矢量叉乘的微分
  20. 物理学中的衔尾蛇(Ouroboros)

热门文章

  1. android CTS test
  2. android 音乐播放器-------歌词同步 lrc
  3. 世界大学生超算竞赛正式启动,再次引发全球关注
  4. 中国人工智能学会通讯——后深度学习时代的人工智能
  5. Dubbo框架应用之(三)--Zookeeper注冊中心、管理控制台的安装及解说
  6. Angular通过CORS实现跨域方案
  7. 关于技术的学习及批判
  8. GitLab 严重漏洞可导致攻击者窃取runner 注册令牌
  9. 黑莓 QNX 被曝严重的 BadAlloc 漏洞 影响数百万汽车和医疗设备
  10. swift项目调用OC库 和OC项目 在swift文件里面全局调用OC库