GPLT L2-007 家庭房产 (并查集)
题意:
给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。
思路:
输入和输出各构造一个结构体,利用并查集归并输入,枚举编号进行输出。
#include <bits/stdc++.h>
using namespace std; const int M=11000; struct DATA{
int id,fid,mid,num,area;
int cid[10];
}data[M]; struct NODE{
int id,people;
double num,area;
bool flag=false;
}ans[M]; int father[M];
bool visit[M]; int Find(int x){
while(x!=father[x]) x=father[x];
return x;
} void Union(int A,int B){
int faA=Find(A);
int faB=Find(B);
if(faA>faB) father[faA]=faB;
if(faB>faA) father[faB]=faA;
} bool cmp(NODE a,NODE b){
if(a.area==b.area) return a.id<b.id;
else return a.area>b.area;
} int main()
{
int n,k,cnt=0;cin>>n;
for(int i=0;i<M;i++) father[i]=i;
for(int i=0;i<n;i++){
cin>>data[i].id>>data[i].fid>>data[i].mid>>k;
visit[data[i].id]=true;
if(data[i].fid!=-1){
Union(data[i].fid,data[i].id);
visit[data[i].fid]=true;
}
if(data[i].mid!=-1){
Union(data[i].mid,data[i].id);
visit[data[i].mid]=true;
}
for(int j=0;j<k;j++){
cin>>data[i].cid[j];
Union(data[i].id,data[i].cid[j]);
visit[data[i].cid[j]]=true;
}
cin>>data[i].num>>data[i].area;
}
for(int i=0;i<n;i++){
int id=Find(data[i].id);
ans[id].id=id;
ans[id].num+=data[i].num;
ans[id].area+=data[i].area;
ans[id].flag=true;
}
for(int i=0;i<M;i++){
if(visit[i]) ++ans[Find(i)].people;
if(ans[i].flag) ++cnt;
}
for(int i=0;i<M;i++){
if(ans[i].flag){
ans[i].num=1.0*ans[i].num/ans[i].people;
ans[i].area=1.0*ans[i].area/ans[i].people;
}
}
sort(ans,ans+M,cmp);
printf("%d\n",cnt);
for(int i=0;i<cnt;i++)
printf("%04d %d %.3f %.3f\n",
ans[i].id,ans[i].people,ans[i].num,ans[i].area);
return 0;
}
GPLT L2-007 家庭房产 (并查集)的更多相关文章
- PATL2-007. 家庭房产-并查集
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- L2-007. 家庭房产(并查集)
#include <cstdio> #include <set> #include <vector> #include <algorithm> usin ...
- TOJ3660家庭关系(并查集+hash+图的连通性)
家庭关系 时间限制(普通/Java):1000MS/3000MS 运行内存限制:65536KByte 总提交: 38 测试通过: 9 描述 给定若干家庭成员之间的关系 ...
- GPLT L2-010 排座位 (并查集)
Tips: 数据范围较小时可把二维数组当做map<pair<int,int>,int>使用. #include <bits/stdc++.h> using name ...
- L2-007 家庭房产 (25 分) (并查集)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题目: 给定每个人的家庭成员和其自己名 ...
- 天梯赛 L2-007. (并查集) 家庭房产
题目链接 题目描述 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式 ...
- L2-007. 家庭房产(并查集)*
L2-007. 家庭房产 参考博客 #include <iostream> #include <cstdio> #include <cstring> #includ ...
- L2-007 家庭房产 (25分) 并查集
题目链接 题解:并查集把一个家的并在一起,特殊的一点是编号大的并到小的去.这个题有个坑编号可能为0000,会错数据3和5. 1 #include<bits/stdc++.h> 2 usin ...
- 团体程序设计天梯赛-练习集L2-007. 家庭房产
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
随机推荐
- 【Flutter】功能型组件之数据共享
前言 InheritedWidget提供了一种数据在widget树中从上到下传递.共享的方式,例如在应用的根widget中通过InheritedWidget共享了一个数据,那么便可以在子widge ...
- mmall商城用户模块开发总结
1.需要实现的功能介绍 注册 登录 用户名校验 忘记密码 提交问题答案 重置密码 获取用户信息 更新用户信息 退出登录 目标: 避免横向越权,纵向越权的安全漏洞 MD5明文加密级增加的salt值 Gu ...
- RecyclerView 源码分析(一) —— 绘制流程解析
概述 对于 RecyclerView 是那么熟悉又那么陌生.熟悉是因为作为一名 Android 开发者,RecyclerView 是经常会在项目里面用到的,陌生是因为只是知道怎么用,但是却不知道 Re ...
- Mac安装homebrew,postman,charles
Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能.简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷. 1. ...
- 【原创】X86_64汇编、寄存器、内嵌汇编
整理的X86_64/X86汇编.寄存器.C内嵌汇编笔记,主要用于查阅使用. 目录 一.汇编语言 二.指令 数据传输指令 栈操作指令 push pop 运算指令 位操作 比较操作指令 标志寄存器 流控制 ...
- 【Oracle】查看表空间是否为自动扩展
查看指定的表空间是否为自动扩展 SQL> select file_name,autoextensible,increment_by from dba_data_files where tab ...
- 【ORACLE】删除表空间,没有删除数据文件怎么办?解决办法
创建表空间 SQL> create tablespace TEST datafile='+DATA/rac/datafile/test01.dbf' size 1g; Tablespace cr ...
- Android之Xposed
基础书籍推荐:1.疯狂JAVA讲义:2.疯狂安卓讲义: 逆向分析必须知道他的原理,不然只会用工具,那就直接GG. 谷歌的镜像网站:https://developers.google.com/andro ...
- top有用的开关控制命令
[原创]本文为原创博文,转发请注明出处:https://www.cnblogs.com/dingbj/p/top_command.html 今天偶然用到top命令,在动态刷新的界面上输入h顺便看了下帮 ...
- egret 解决游戏loading前的黑屏
一.问题 egret游戏loading界面的制作可以参考这个,我就不多赘述啦,步骤也比较详细<Egret制作Loading页面及分步加载资源教程>. 后面我发现即便加上loading,在游 ...