pta l2-7(家庭房产)
题目链接: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(家庭房产)的更多相关文章
- L2-007 家庭房产 (25 分)
L2-007 家庭房产 (25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤),随后N行,每行按下 ...
- 团体程序设计天梯赛-练习集L2-007. 家庭房产
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- L2-007. 家庭房产
L2-007. 家庭房产 题目链接:https://www.patest.cn/contests/gplt/L2-007 并查集 初学,看这题的时候完全没有什么好的想法,参考了@yinzm的blog用 ...
- L2-007. 家庭房产(并查集)*
L2-007. 家庭房产 参考博客 #include <iostream> #include <cstdio> #include <cstring> #includ ...
- 天梯赛 L2-007. (并查集) 家庭房产
题目链接 题目描述 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式 ...
- PATL2-007. 家庭房产-并查集
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- pat 团体天梯赛 L2-007. 家庭房产
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产 ...
- L2-007 家庭房产 (25 分) (并查集)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题目: 给定每个人的家庭成员和其自己名 ...
- PAT L2-007 家庭房产
https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 给定每个人的家庭成员和其自己名下的房产,请你 ...
随机推荐
- Android Data Binding Library
Data Binding Library Data Binding Library是一个支持库,允许您使用声明格式(而不是编程)将布局中的UI组件与应用程序中的数据源绑定. 布局通常在调用UI框架方法 ...
- 【JAVA】POI设置EXCEL单元格格式为文本、小数、百分比、货币、日期、科学计数法和中文大写
POI设置EXCEL单元格格式为文本.小数.百分比.货币.日期.科学计数法和中文大写 博客分类:,本文内容转自 http://javacrazyer.iteye.com/blog/894850 FIL ...
- ubuntu 使用sudo apt-get update命令的时候会报http://archive.ubuntukylin.com:10006/ubuntukylin/dists/xenial/InRelease 无法连接
参考: https://blog.csdn.net/xiaoyan94/article/details/52404539 于是找到一个包含 http://archive.ubuntukylin.co ...
- MySQL 5.7.20 ONLY_FULL_GROUP_BY
< SQL_MODE 的配置方式 > 01,默认情况下 5.7.20 MySQL 开启该模式,我们可以用指 SQL 预计查看 => select @@global.sql_mode; ...
- jsp中文乱码
<%@page pageEncoding="UTF-8"%> <meta http-equiv="Content-Type" content= ...
- js/jquery this 坑
重要:js onclick() 函数中,取不到this !!! 错误的写法: function test(){ $(this).parent().addClass('active') } 正确的写法是 ...
- uiautomator:Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn't exist!
尝试用android sdk的uiautomatorviewer抓元素的时候报错:Error while obtaining UI hierarchy XML file: com.android.dd ...
- elasticsearch相关
- 如何禁用Firefox,chrome浏览器“不安全密码警告”
在任何HTTP页面中,一个全新的“不安全密码警告”将会在用户点击表单时直接出现在登陆框的下方,强行保证所有用户都能看到“此链接不安全,你的个人利益将受到损害”等字眼,同时整个页面也会收到损坏的挂锁图标 ...
- Git实用教程
http://iissnan.com/progit/html/zh/ch2_2.html