PAT甲级1114. Family Property
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的更多相关文章
- PAT甲级——1114 Family Property (并查集)
		此文章同步发布在我的CSDN上https://blog.csdn.net/weixin_44385565/article/details/89930332 1114 Family Property ( ... 
- pat甲级1114
		1114 Family Property(25 分) This time, you are supposed to help us collect the data for family-owned ... 
- PAT甲级——A1114 Family Property【25】
		This time, you are supposed to help us collect the data for family-owned property. Given each person ... 
- PAT 1114 Family Property[并查集][难]
		1114 Family Property(25 分) This time, you are supposed to help us collect the data for family-owned ... 
- pat甲级题解(更新到1013)
		1001. A+B Format (20) 注意负数,没别的了. 用scanf来补 前导0 和 前导的空格 很方便. #include <iostream> #include <cs ... 
- PAT甲级题解(慢慢刷中)
		博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6102219.html特别不喜欢那些随便转载别人的原创文章又不给 ... 
- 【转载】【PAT】PAT甲级题型分类整理
		最短路径 Emergency (25)-PAT甲级真题(Dijkstra算法) Public Bike Management (30)-PAT甲级真题(Dijkstra + DFS) Travel P ... 
- PAT 甲级真题题解(63-120)
		2019/4/3 1063 Set Similarity n个序列分别先放进集合里去重.在询问的时候,遍历A集合中每个数,判断下该数在B集合中是否存在,统计存在个数(分子),分母就是两个集合大小减去分 ... 
- PAT甲级目录
		树(23) 备注 1004 Counting Leaves 1020 Tree Traversals 1043 Is It a Binary Search Tree 判断BST,BST的性质 ... 
随机推荐
- java中Cookie使用问题(message:invalid character [32] was present in the Cookie value)
			1. 问题描述 Servlet中执行下面一段代码: public void doGet(HttpServletRequest request, HttpServletResponse response ... 
- docker stack 部署 seafile(http)
			=============================================== 2018/5/13_第1次修改 ccb_warlock == ... 
- json在线工具
			1.json在线格式化工具 http://www.choujone.com/json/ 2.json在线比较工具 http://tlrobinson.net/projects/javascript-f ... 
- WordPress“无法将上传的文件移动至wp-content/uploads/”的解决办法
			WordPress“无法将上传的文件移动至wp-content/uploads/”的问题在有些配置不完善的虚拟主机或服务器中会碰到,一般会出现以下症状:1.无论是从文章编辑页面还是媒体库页面都无法上传 ... 
- 关于在调用JAVAFX相关包时遇到Access restriction: The type 'Application' is not API (restriction on required library)的解决方法
			点击工具栏的Project->Properties->Java Build Path->Libraries-> 双击第一项 点击Add添加允许javafx 然后就不会报错了 
- SQl查询数据库库名,表名、表的列名
			查询数据库 select * From master.dbo.sysdatabases where name='数据库名' and status<>512 --读取库中的所有表名 (当 ... 
- sass问题
			用sass的minix定义一些代码片段,且可传参数 /** * @module 功能 * @description 生成全屏方法 * @method fullscreen * @version 1. ... 
- Inno setup 常用修改技巧
			Inno setup 常用修改技巧1 .如何让协议许可页面默认选中我同意按钮 [code]procedure InitializeWizard();beginWizardForm.LICENSEACC ... 
- USACO 5.1 Starry Night
			Starry NightIOI 98 High up in the night sky, the shining stars appear in clusters of various shapes. ... 
- PLSQL Developer个性化设置
			1)代码自动完成 和讨厌的.才后出现提示说88,我用快捷键任意呼唤. Tools->Preferences->User Interface->Key Configuration.找到 ... 
