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++

// pat1114.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include<iostream>
#include<cstdio>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
#include<stdio.h>
#include<map>
#include<cmath>
#include<unordered_map>
#include<unordered_set> using namespace std; const int maxn = 1e5 + 5;
int vis[maxn]; struct UF
{
int pre[maxn];
void init()
{
for (int i = 0; i < maxn; i++)
pre[i] = i;
} int find(int x)
{
return pre[x] == x ? x : find(pre[x]);
} void Union(int a, int b)
{
int x = find(a);
int y = find(b);
if (x == y) return;
pre[max(x, y)] = min(x, y);
}
}uf; struct Person
{
int id = -1;
int dad, mom;
int k;
int child[5];
int estate;
int area;
}person[maxn]; struct Family
{
int minid;
int member_cnt = 0;
int all_estate = 0;
int all_area = 0;
float avg_estate;
float avg_area;
bool operator<(const Family tmp)const {
if (avg_area == tmp.avg_area) {
return minid < tmp.minid;
}
else {
return avg_area > tmp.avg_area;
}
}
}family[maxn]; int main()
{
int n, id;
scanf("%d", &n);
uf.init();
memset(vis, 0, sizeof(vis));
for (int i = 0; i < n; i++)
{
scanf("%d", &id);
person[id].id = id;
scanf("%d %d %d", &person[id].dad, &person[id].mom, &person[id].k);
vis[id] = 1;
if (person[id].dad != -1)
{
uf.Union(id, person[id].dad);
vis[person[id].dad] = 1;
}
if (person[id].mom != -1)
{
uf.Union(id, person[id].mom);
vis[person[id].mom] = 1;
}
for (int j = 0; j < person[id].k; j++)
{
scanf("%d", &person[id].child[j]);
uf.Union(id, person[id].child[j]);
vis[person[id].child[j]] = 1;
}
scanf("%d %d", &person[id].estate, &person[id].area);
} int idArray[maxn];
int cnt = 0;
for (int i = 0; i < maxn; i++)
{
if (vis[i] == 1)
{
idArray[cnt++] = i;
}
}
memset(vis, 0, sizeof(vis));
int u, fa;
for (int i = 0; i < cnt; i++)
{
u = idArray[i];
fa = uf.find(u);
vis[fa] = 1;
family[fa].minid = fa;
family[fa].member_cnt++;
family[fa].all_estate += person[u].estate;
family[fa].all_area += person[u].area;
} int family_num = 0;
for (int i = 0; i < maxn; i++)
{
if (vis[i] == 1)
{
family_num++;
family[i].avg_area = (float)family[i].all_area / family[i].member_cnt;
family[i].avg_estate = (float)family[i].all_estate / family[i].member_cnt;
}
}
sort(family, family + maxn); printf("%d\n", family_num);
for (int i = 0; i < family_num; i++)
{
printf("%04d %d %.3f %.3f\n", family[i].minid, family[i].member_cnt, family[i].avg_estate,
family[i].avg_area);
}
return 0;
}

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. java中Cookie使用问题(message:invalid character [32] was present in the Cookie value)

    1. 问题描述 Servlet中执行下面一段代码: public void doGet(HttpServletRequest request, HttpServletResponse response ...

  2. docker stack 部署 seafile(http)

    =============================================== 2018/5/13_第1次修改                       ccb_warlock == ...

  3. json在线工具

    1.json在线格式化工具 http://www.choujone.com/json/ 2.json在线比较工具 http://tlrobinson.net/projects/javascript-f ...

  4. WordPress“无法将上传的文件移动至wp-content/uploads/”的解决办法

    WordPress“无法将上传的文件移动至wp-content/uploads/”的问题在有些配置不完善的虚拟主机或服务器中会碰到,一般会出现以下症状:1.无论是从文章编辑页面还是媒体库页面都无法上传 ...

  5. 关于在调用JAVAFX相关包时遇到Access restriction: The type 'Application' is not API (restriction on required library)的解决方法

    点击工具栏的Project->Properties->Java Build Path->Libraries-> 双击第一项 点击Add添加允许javafx 然后就不会报错了

  6. SQl查询数据库库名,表名、表的列名

    查询数据库 select * From master.dbo.sysdatabases where name='数据库名' and status<>512   --读取库中的所有表名 (当 ...

  7. sass问题

     用sass的minix定义一些代码片段,且可传参数 /** * @module 功能 * @description 生成全屏方法 * @method fullscreen * @version 1. ...

  8. I​n​n​o​ ​s​e​t​u​p​ ​常​用​修​改​技​巧

    Inno setup 常用修改技巧1 .如何让协议许可页面默认选中我同意按钮 [code]procedure InitializeWizard();beginWizardForm.LICENSEACC ...

  9. USACO 5.1 Starry Night

    Starry NightIOI 98 High up in the night sky, the shining stars appear in clusters of various shapes. ...

  10. PLSQL Developer个性化设置

    1)代码自动完成 和讨厌的.才后出现提示说88,我用快捷键任意呼唤. Tools->Preferences->User Interface->Key Configuration.找到 ...