1114 Family Property (25)

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​ Mestate​ 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; Mestate​ 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 AVGsets​ AVGarea​

where ID is the smallest ID in the family; M is the total number of family members; AVGsets​ is the average number of sets of their real estate; and AVGarea​ 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位。家庭信息首先按人均面积降序输出,若有并列,则按成员编号的升序输出。
分析:并查集。这里用哈希表模拟了。将同一个家庭的成员用flag标记成同一个数字,统计有多少不同的flag,相同flag的情况下,有多少人,最小编号,房产总数,房产面积总数并存储,最后输出。

注意0000也是有效的成员编号。

#include<algorithm>
#include <iostream>
#include  <cstdlib>
#include  <cstring>
#include   <string>
#include   <vector>
#include   <cstdio>
#include    <queue>
#include    <stack>
#include    <ctime>
#include    <cmath>
#include      <map>
#include      <set>
#define INF 0xffffffff
#define db1(x) cout<<#x<<"="<<(x)<<endl
#define db2(x,y) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<endl
#define db3(x,y,z) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<endl
#define db4(x,y,z,r) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<endl
#define db5(x,y,z,r,w) cout<<#x<<"="<<(x)<<", "<<#y<<"="<<(y)<<", "<<#z<<"="<<(z)<<", "<<#r<<"="<<(r)<<", "<<#w<<"="<<(w)<<endl
using namespace std;typedef struct node//家庭成员结构
{int id,flag;//自己的编号,以及对应家庭的编号int fat,mon;//父母的编号int m,area;//自己有多少房产和房产面积
}node;typedef struct family//因为是哈希表存储的成员,最后需要把所有成员拿出来排序
{int id,sum;//该成员的编号,家庭人数总和double sets,area;//这一家庭的平均套数和平均面积
}family;bool cmpnode(node a,node b)//快排比较函数
{return a.flag<b.flag;
}bool cmpans(family a,family b)//快排比较函数
{if(a.area!=b.area)return a.area>b.area;return a.id<b.id;
}int main(void)
{#ifdef testfreopen("in.txt","r",stdin);//freopen("in.txt","w",stdout);clock_t start=clock();#endif //testint n,cnt=1;scanf("%d",&n);node num[10010];//初始化哈希表for(int i=0;i<10000;++i)num[i].id=i,num[i].flag=num[i].fat=num[i].mon=-1,num[i].area=num[i].m=0;for(int i=0;i<n;++i){int a,index=cnt;scanf("%d",&a);scanf("%d%d",&num[a].fat,&num[a].mon);if(num[a].flag!=-1)//如果当前成员已经是某个家庭的成员{//如果父亲或者母亲是某个家庭的成员,需要合并集合,所有被标记的全部改为当前节点标记index=num[a].flag;if(num[a].fat!=-1&&num[a].mon!=-1)//如果父母都在{int temp1=num[num[a].fat].flag,temp2=num[num[a].mon].flag;for(int i=1;i<10000;++i)if((temp1!=-1&&num[i].flag==temp1)||(temp2!=-1&&num[i].flag==temp2))num[i].flag=index;num[num[a].fat].flag=num[num[a].mon].flag=index;}else if(num[a].fat!=-1)//父亲在,母亲不在{int temp1=num[num[a].fat].flag;for(int i=1;i<10000;++i)if(temp1!=-1&&num[i].flag==temp1)num[i].flag=index;}else if(num[a].mon!=-1)//母亲在,父亲不在{int temp2=num[num[a].mon].flag;for(int i=1;i<10000;++i)if(temp2!=-1&&num[i].flag==temp2)num[i].flag=index;}}else if(num[a].fat!=-1&&num[num[a].fat].flag!=-1){//父亲被标记过,同步成父亲的标记index=num[num[a].fat].flag;num[a].flag=index;if(num[a].mon!=-1){int temp2=num[num[a].mon].flag;for(int i=0;i<10000;++i)if(temp2!=-1&&num[i].flag==temp2)num[i].flag=index;num[num[a].mon].flag=index;}}else if(num[a].mon!=-1&&num[num[a].mon].flag!=-1){//母亲被标记过,同步成母亲的标记index=num[num[a].mon].flag;num[a].flag=index;if(num[a].fat!=-1){int temp1=num[num[a].fat].flag;for(int i=0;i<10000;++i)if(temp1!=-1&&num[i].flag==temp1)num[i].flag=index;num[num[a].fat].flag=index;}}else//都没被标记,全部标记成新的标记{index=cnt;num[a].flag=num[num[a].fat].flag=num[num[a].mon].flag=index;cnt++;}int k;scanf("%d",&k);while(k--)//孩子部分同样考虑是否被标记{int aa;scanf("%d",&aa);if(num[aa].flag!=-1){int temp=num[a].flag;index=num[aa].flag;for(int i=0;i<10000;++i)if(num[i].flag==temp)num[i].flag=index;}else num[aa].flag=index;}scanf("%d%d",&num[a].m,&num[a].area);}int total_num=0;node val[10005];for(int i=0;i<10000;++i){if(num[i].flag!=-1)val[total_num++]=num[i];}sort(val,val+total_num,cmpnode);//    for(int i=0;i<total_num;++i)
//        db4(val[i].id,val[i].flag,val[i].m,val[i].area);family ans[total_num+5];int tempflag=val[0].flag,ans_num=0,miniid=val[0].id,cntnum=1,setnum=val[0].m,areanum=val[0].area;for(int i=1;i<total_num;++i){if(val[i].flag==tempflag){miniid=min(val[i].id,miniid);cntnum++;setnum+=val[i].m,areanum+=val[i].area;}else{ans[ans_num].id=miniid;ans[ans_num].sum=cntnum;ans[ans_num].sets=1.0*setnum/cntnum;ans[ans_num].area=1.0*areanum/cntnum;ans_num++;tempflag=val[i].flag,miniid=val[i].id,cntnum=1,setnum=val[i].m,areanum=val[i].area;}}ans[ans_num].id=miniid;ans[ans_num].sum=cntnum;ans[ans_num].sets=1.0*setnum/cntnum;ans[ans_num].area=1.0*areanum/cntnum;ans_num++;printf("%d\n",ans_num);sort(ans,ans+ans_num,cmpans);for(int i=0;i<ans_num;++i){printf("%04d %d %.3f %.3f\n",ans[i].id,ans[i].sum,ans[i].sets,ans[i].area);}#ifdef testclockid_t end=clock();double endtime=(double)(end-start)/CLOCKS_PER_SEC;printf("\n\n\n\n\n");cout<<"Total time:"<<endtime<<"s"<<endl;        //s为单位cout<<"Total time:"<<endtime*1000<<"ms"<<endl;    //ms为单位#endif //testreturn 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/64895.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

canvas绘制仪表盘刻度盘

canvas画布可以实现在网页上绘制图形的方法&#xff0c;比如图表、图片处理、动画、游戏等。今天我们在vue模板下用canvas实现仪表盘的绘制。 对canvas不熟悉的同学可以先了解下canvas的API文档&#xff1a;canvas API中文网 - Canvas API中文文档首页地图 一、创建模板&#…

Spring Boot 中实现自定义注解记录接口日志功能

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的全栈工程师 欢迎分享 / 收藏 / 赞 / 在看…

【超详细实操内容】django的身份验证系统之限制用户访问的三种方式

目录 1、使用request.user.is_authenticated属性 2、装饰器login_required 3、LoginRequiredMixin类 通常情况下,网站都会对用户限制访问,例如,未登录的用户不可访问用户中心页面。Django框架中使用request.user.isauthenticated属性、装饰器loginrequired和LoginRequire…

scss配置全局变量报错[sass] Can‘t find stylesheet to import.

路径没有错误&#xff0c;使用别名即可 后又提示Deprecation Warning: Sass import rules are deprecated and will be removed in Dart Sass 3.0.0. 将import改为use 使用时在$前添加全局变量所在文件&#xff0c;即variable.

基于Qlearning强化学习的机器人路线规划matlab仿真

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下&#xff08;完整代码运行后无水印&#xff09;&#xff1a; 训练过程 测试结果 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论…

9 RCC使用HSE、HSI配置时钟

一、时钟树 RCC&#xff1a;reset clock control,复位和时钟控制器。HSE是外部的高速时钟信号&#xff0c;可以由有源晶振或者无源晶振提供。如果使用HSE或者HSE经过PLL倍频之后的时钟作为系统时钟SYSCLK&#xff0c;当HSE故障时候&#xff0c;不仅HSE会被关闭&#xff0c;PLL…

认识数据结构之——排序

一、 插入排序&#xff1a; 直接插入排序(以排升序为例)&#xff1a; 排序思想&#xff1a; 单趟&#xff1a;记录某个位置的值&#xff0c;一个一个和前面的值比较&#xff0c;碰到更大的就往后覆盖&#xff0c;碰到更小的或者相等的就结束&#xff0c;最后将记录的值插入到…

uniapp 微信小程序 功能入口

单行单独展示 效果图 html <view class"shopchoose flex jsb ac" click"routerTo(要跳转的页面)"><view class"flex ac"><image src"/static/dyd.png" mode"aspectFit" class"shopchooseimg"&g…

苍穹外卖-day05redis 缓存的学习

苍穹外卖-day05 课程内容 Redis入门Redis数据类型Redis常用命令在Java中操作Redis店铺营业状态设置 学习目标 了解Redis的作用和安装过程 掌握Redis常用的数据类型 掌握Redis常用命令的使用 能够使用Spring Data Redis相关API操作Redis 能够开发店铺营业状态功能代码 功能实…

Linux之系统管理

一、相关命令 筛选 grep&#xff0c;可以用来进行筛选&#xff0c;例如对目录筛选课写成 # 过滤出带serv的 ls /usr/sbin | grep serv2. 对服务的操作 2.1 centos6版本 service 服务名 start|stop|restart|status # start&#xff1a;开启 # stop&#xff1a;停止 # restart…

什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap

在刚刚过去的 FlutterInProduction 活动里&#xff0c;Flutter 官方除了介绍「历史进程」和「用户案例」之外&#xff0c;也着重提及了未来相关的 roadmap &#xff0c;其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…

Unity录屏插件-使用Recorder录制视频

目录 1.Recorder的下载 2.Recorder面板 2.1常规录制属性 2.2录制器配置 2.2.1添加录制器 2.2.2配置Input属性 2.2.3配置 Output Format 属性 2.2.4配置 Output File 属性 3.Recorder的使用 3.1录制Game View视频 3.1.1Recorder配置与场景搭建 3.1.2开始录制 3.1.3…

Android Vendor Overlay机制

背景介绍&#xff1a; 看Android 15版本更新时&#xff0c;"Android 15 deprecates vendor overlay"。 猜想这个vendor overlay是之前用过的settings overlay&#xff0c; 不过具体是怎么回事呢&#xff1f; 目录 Vendor Overlay介绍 Vendor Overlay工作原理 Ven…

Python 绘图魔法:用turtle库开启你的编程艺术之旅

&#x1f3e0;大家好&#xff0c;我是Yui_&#xff0c;目标成为全栈工程师~&#x1f4ac; &#x1f351;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f680;如有不懂&#xff0c;可以随时向我提问&#…

AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python

支持向量机是AI开发中最常见的一种算法。之前我们已经一起初步了解了它的概念和应用&#xff0c;今天我们用它来进行一次文本情感分析训练。 一、概念温习 支持向量机&#xff08;SVM&#xff09;是一种监督学习算法&#xff0c;广泛用于分类和回归问题。 它的核心思想是通过…

.net core在linux导出excel,System.Drawing.Common is not supported on this platform

使用框架 .NET7 导出组件 Aspose.Cells for .NET 5.3.1 asp.net core mvc 如果使用Aspose.Cells导出excel时&#xff0c;报错 &#xff1a; System.Drawing.Common is not supported on this platform 平台特定实现&#xff1a; 对于Windows平台&#xff0c;System.Drawing.C…

【Unity3D】实现可视化链式结构数据(节点数据)

关键词&#xff1a;UnityEditor、可视化节点编辑、Unity编辑器自定义窗口工具 使用Newtonsoft.Json、UnityEditor相关接口实现 主要代码&#xff1a; Handles.DrawBezier(起点&#xff0c;终点&#xff0c;起点切线向量&#xff0c;终点切线向量&#xff0c;颜色&#xff0c;n…

6UCPCI板卡设计方案:8-基于双TMS320C6678 + XC7K420T的6U CPCI Express高速数据处理平台

基于双TMS320C6678 XC7K420T的6U CPCI Express高速数据处理平台 1、板卡概述 板卡由我公司自主研发&#xff0c;基于6UCPCI架构&#xff0c;处理板包含双片TI DSP TMS320C6678芯片&#xff1b;一片Xilinx公司FPGA XC7K420T-1FFG1156 芯片&#xff1b;六个千兆网口&#xff…

Python + 深度学习从 0 到 1(01 / 99)

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; ⭐ 深度学习之前&#xff1a;机器学习简史 什么要了解…

丹摩|丹摩助力selenium实现大麦网抢票

丹摩&#xff5c;丹摩助力selenium实现大麦网抢票 声明&#xff1a;非广告&#xff0c;为用户体验 1.引言 在人工智能飞速发展的今天&#xff0c;丹摩智算平台&#xff08;DAMODEL&#xff09;以其卓越的AI算力服务脱颖而出&#xff0c;为开发者提供了一个简化AI开发流程的强…