L2-007. 家庭房产
L2-007. 家庭房产
题目链接:https://www.patest.cn/contests/gplt/L2-007
并查集
初学,看这题的时候完全没有什么好的想法,参考了
@yinzm的blog用BFS做了一遍,错了三个测试点,找了一下午没找出来,另寻他法。看到了并查集这个概念,做了一两题稍微掌握了一下,尝试做这题。
代码如下:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#define EPS 1e-8
#define N 10000
using namespace std;
struct node{
int house,area;
};
struct res{
int num;
int people;
int house;
int area;
double rh,ra;
};
res r[];
int k;
node a[N];
int pre[N];
bool mark[N];
void Make(){
for(int i=;i<N;++i)pre[i]=i;
}
int Find(int x){
if(x!=pre[x])
pre[x]=Find(pre[x]);
return pre[x];
}
void uion(int x,int y){
int k1=Find(x),k2=Find(y);
k1<k2?pre[k2]=k1:pre[k1]=k2;
}
bool compare(res x,res y){
if(fabs(x.ra-y.ra)<EPS)return x.num<y.num;
else return x.ra>y.ra;
}
int main(void){
freopen("in.txt","r",stdin);
int n;
scanf("%d",&n);
Make();
for(int i=;i<n;++i){
int me,father,mother,num,kid[],house,area;
scanf("%d%d%d%d",&me,&father,&mother,&num);
mark[me]=;
if(father!=-){
uion(me,father);
mark[father]=;
}
if(mother!=-){
uion(me,mother);
mark[mother]=;
}
for(int i=;i<num;++i){
scanf("%d",&kid[i]);
mark[kid[i]]=;
uion(me,kid[i]);
}
scanf("%d%d",&house,&area);
a[me].house=house;
a[me].area=area;
}
for(int i=;i<N;++i)
Find(i);
int p;
for(int i=;i<N;++i){
if(mark[i]){
if(k==){
r[k].num=pre[i];
r[k].people++;
r[k].house=a[i].house;
r[k].area=a[i].area;
k++;
}else{
bool flag=true;
for(p=;p<k;++p){
if(r[p].num==pre[i]){
flag=false;
break;
}
}
if(flag){
r[k].num=pre[i];
r[k].people++;
r[k].house=a[i].house;
r[k].area=a[i].area;
k++;
}else{
r[p].people++;
r[p].house+=a[i].house;
r[p].area+=a[i].area;
}
}
}
}
for(int i=;i<k;++i){
r[i].rh=r[i].house*1.0/r[i].people;
r[i].ra=r[i].area*1.0/r[i].people;
}
printf("%d\n",k);
sort(r,r+k,compare);
for(int i=;i<k;++i)
printf("%04d %d %.3lf %.3lf\n",r[i].num,r[i].people,r[i].rh,r[i].ra);
return ;
}
L2-007. 家庭房产的更多相关文章
- 团体程序设计天梯赛-练习集L2-007. 家庭房产
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- L2-007 家庭房产 (25 分)
L2-007 家庭房产 (25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤),随后N行,每行按下 ...
- 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 给定每个人的家庭成员和其自己名下的房产,请你 ...
- pat 团体赛练习题集 L2-007. 家庭房产
给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式给出一个人的房产: ...
随机推荐
- ionic2环境搭建与hello word
一.环境搭建 需要安装配置以下组件,具体参考:Cordova环境搭建, 我的版本信息如下: 这里要特别注意,node版本,ionic2需要 大于v6 ,而不是0.xx版本,否则会不支持报错. 二.设置 ...
- 二、mongo数据库
官网:https://www.mongodb.com/ 进入官网 右上角有个下载按钮Download 1.完成安装后:运行--cmd(命令面板) 2.常用命令: 打开数据库 mongod –dbpat ...
- CA认证
nginx下证书配置 nginx 下 配 置 CA 认 证 为nginx配置https并自签名证书 开启443端口 实验环境: centos6.5 192.168.16.14 [ ...
- 记一次Debian下PHP环境的搭建(nginx+mariadb+PHP)!
顺序是先安装nginx,然后安装mariadb,最后安装PHP.系统用的是debian7 安装nginx sudo apt-get install nginx 我这里用的是稳定的源,没用测试的源,所以 ...
- ubuntu 编译android源码
1.https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ 清华大学Android 镜像使用 ...
- TCP的滑动窗口机制【转】
原文链接:http://www.cnblogs.com/luoquan/p/4886345.html TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的 ...
- android屏幕适配之度量单位、屏幕分类、图标尺寸归类分析
好久没有做android项目UI的适配了,好多基本概念都已经模糊了,于是萌生了将屏幕分辨率.常用单位.常用图标尺寸等信息规整的想法,一下就是通过查询资料,自己验证的一些随笔,如有失误之处,望大家及时予 ...
- NGINX----源码阅读一(main函数)
1.ngx_debug_init(); 初始化debug函数,一般为空. 2.ngx_strerror_init(): 将系统错误码+错误信息,以ngx_str_t数组保存. 3.ngx_get_op ...
- .net XML操作
一.常规介绍 //初始化一个xml对象 XmlDocument xml = new XmlDocument(); //加载xml文件 xml.Load("文件路径"); //读取指 ...
- C#删除只读文件或文件夹(解决File.Delete无法删除文件)
引用: http://www.jb51.net/article/72181.htm C#删除只读文件的方法: if (File.GetAttributes(FFName).ToString().I ...