题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872

题意:给定n个人的信息,包括其编号,父母以及孩子的编号,以及其名下的房产数量和房产面积,要求有多少个家族,并列出每个家族的最小编号,家庭人数,家庭人均房产数量和人均房产面积。

思路:算法部分就是简单的并查集,但数据处理等方面还挺复杂,一定要仔细。首先用个data结构体数组来存储输入的每个人的信息,用node结构体来存储每个家族的信息,其中包括该家族最小成员编号,人数,人均房产数量和人均房产面积,其中flag涌来标识是否存在,因为数据量不大,可以暴力处理,就是要注意编码细节。输入人的信息时,将他和其父母孩子合并,并使祖先的编号最小,用vis数组标记该编号是否出现。合并之后遍历n个人,将其1房产信息都加入到家族结构体中,最后还要排序,先按人均房产面积降序排列,再按编号升序排列。

AC代码:

#include<bits/stdc++.h>
using namespace std; struct data{
int id,fa,ma,k,num,area;
int ch[];
}a[]; struct node{
int idm,pp,flag;
double num,area;
}fam[]; int root[],vis[],n,res; int getr(int k){
if(root[k]==k) return k;
else return root[k]=getr(root[k]);
} void Union(int x,int y){
int xr=getr(x),yr=getr(y);
if(xr<yr)
root[yr]=xr;
else
root[xr]=yr;
} bool cmp(node xx,node yy){
if(xx.area==yy.area)
return xx.idm<yy.idm;
else
return xx.area>yy.area;
} int main(){
scanf("%d",&n);
for(int i=;i<;++i)
root[i]=i;
for(int i=;i<n;++i){
scanf("%d%d%d%d",&a[i].id,&a[i].fa,&a[i].ma,&a[i].k);
for(int j=;j<a[i].k;++j)
scanf("%d",&a[i].ch[j]);
scanf("%d%d",&a[i].num,&a[i].area);
vis[a[i].id]=;
if(a[i].fa!=-)
vis[a[i].fa]=,Union(a[i].id,a[i].fa);
if(a[i].ma!=-)
vis[a[i].ma]=,Union(a[i].id,a[i].ma);
for(int j=;j<a[i].k;++j)
vis[a[i].ch[j]]=,Union(a[i].id,a[i].ch[j]);
}
for(int i=;i<n;++i){
int idr=getr(a[i].id);
fam[idr].idm=idr;
fam[idr].num+=a[i].num;
fam[idr].area+=a[i].area;
fam[idr].flag=;
}
for(int i=;i<;++i){
if(vis[i]) ++fam[getr(i)].pp;
if(fam[i].flag) ++res;
}
for(int i=;i<;++i)
if(fam[i].flag){
fam[i].num=fam[i].num*1.0/(fam[i].pp*1.0);
fam[i].area=fam[i].area*1.0/(fam[i].pp*1.0);
}
sort(fam,fam+,cmp);
printf("%d\n",res);
for(int i=;i<res;++i)
printf("%04d %d %.3f %.3f\n",fam[i].idm,fam[i].pp,fam[i].num,fam[i].area);
return ;
}

pta l2-7(家庭房产)的更多相关文章

  1. L2-007 家庭房产 (25 分)

    L2-007 家庭房产 (25 分)   给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤),随后N行,每行按下 ...

  2. 团体程序设计天梯赛-练习集L2-007. 家庭房产

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...

  3. L2-007. 家庭房产

    L2-007. 家庭房产 题目链接:https://www.patest.cn/contests/gplt/L2-007 并查集 初学,看这题的时候完全没有什么好的想法,参考了@yinzm的blog用 ...

  4. L2-007. 家庭房产(并查集)*

    L2-007. 家庭房产 参考博客 #include <iostream> #include <cstdio> #include <cstring> #includ ...

  5. 天梯赛 L2-007. (并查集) 家庭房产

    题目链接 题目描述 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式 ...

  6. PATL2-007. 家庭房产-并查集

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...

  7. pat 团体天梯赛 L2-007. 家庭房产

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产 ...

  8. L2-007 家庭房产 (25 分) (并查集)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题目: 给定每个人的家庭成员和其自己名 ...

  9. PAT L2-007 家庭房产

    https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 给定每个人的家庭成员和其自己名下的房产,请你 ...

随机推荐

  1. snmp安装,及测试

    https://www.cnblogs.com/xdp-gacl/p/4016524.html

  2. windows定时关机命令

    at 11:00 shutdown.exe -s -t 120 https://jingyan.baidu.com/article/574c52191ea9996c8c9dc17a.html?st=2 ...

  3. AspxGridView使用手记

    AspxGridView使用手记   一.  基本使用方法  4 1.导入Dll文件   4 2.Asp.Net页面控件注册 4 3. Asp.Net页面控件声明    5 4.删除licenses. ...

  4. 02.设计模式_NullObject模式

    使用NULL OBJECT模式,我们可以确保返回的总是有效的对象,即使失败时也代表对象什么也不做. 下面以一个数据库查询的示例来演示空对象模式. 1.Employe实体对象空对象的接口 Employe ...

  5. [ 记录 ] Vue 对象数组中一项数据改变,页面不更新

    问题描述:将data中数据列表渲染到页面,循环生成 el-switch,点击页面中 el-switch 后数组中某项值改变,但是页面不更新 数据格式如下 export default{ data(){ ...

  6. javascript的DOM操作获取元素

    一.document.getElementById()    根据Id获取元素节点 <div id="div1"> <p id="p1"> ...

  7. treeMap 基于JDK 1.8的学习

    困惑了很久的红黑树========来个了断吧 本文主要是为了描述旋转的原则,所以,至于红黑树的数据结构,红黑树的基本准则,不在强调,,红黑树困惑的就是这旋转的过程.!!! 画红黑树很简单的画图工具: ...

  8. LeetCode OJ 450. Delete Node in a BST

    Given a root node reference of a BST and a key, delete the node with the given key in the BST. Retur ...

  9. GPS坐标转换 百度地图API调用

    1 如果GPS输出的值是DD.DDDDDDDD格式的,直接调用地图API的转换函数处理,就可以正常显示2 如果GPS输出的值是DD.MMMMMMMM格式的,就需要先进行分转度处理,然后再调API,就可 ...

  10. [Linux]CentOS7搭建Nginx + MySQL + PHP

    ------------------------------------------------------------------------------------- Nginx安装参考地址:ht ...