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. 家庭房产的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. PAT L2-007 家庭房产

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

  9. pat 团体赛练习题集 L2-007. 家庭房产

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

随机推荐

  1. MVC源码解析 - Http Pipeline 解析(下)

    接上一篇, 我在 HttpModule 的Init方法中, 添加了自己的事件, 在Pipeline里, 就会把握注册的事件给执行了. 那么Pipeline是如何执行并且按照什么顺序执行的呢? 现在我们 ...

  2. [pinyin4j] java版汉字转换拼音(大小写)

    pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2. ...

  3. Linux软件安装管理 - CentOS (三)

    1. 软件包管理简介 2. rpm命令管理(Redhat Package Manager) 3. yum在线安装 4. 源码包管理 4.1 源码包和RPM包的区别 4.1.1 区别 安装前:概念上的区 ...

  4. 安装hadoop-eclipse-plugin插件报错解决办法

    安装myecplise的hadoop-eclipse-plugin-2.2.0插件的时候,  把插件放到这个文件夹里 打开myeclipse windows-->preferences 点击 H ...

  5. C# winform调用东软动态库的问题

    在C# winform程序中调用东软的动态库ESActiveX.ocx 如果是引用ESActiveX.ocx,然后在代码中设置示例,调用就会报"灾难性错误" 如果在工具箱中点击右键 ...

  6. Objective-C Runtime 运行时之三:方法与消息(转载)

    前面我们讨论了Runtime中对类和对象的处理,及对成员变量与属性的处理.这一章,我们就要开始讨论Runtime中最有意思的一部分:消息处理机制.我们将详细讨论消息的发送及消息的转发.不过在讨论消息之 ...

  7. syntaxhighlighter的使用

    第一 解压压缩包,scripts文件夹中包含了各种语言的JS文件,在styles文件夹中是各种显示高亮的主题 第二 如何使用?首先要引入其核心javascript文件shCore.js和核心CSS文件 ...

  8. sass 安装和使用

    1,安装ruby :检查本地是否安装ruby: #ruby -v 2,安装sass: #gem install sass 3,检查是否安装成功:#sass -v 4,.scss文件不能直接被浏览器解析 ...

  9. DOM小解

    现在来说说DOM 文档对象模型DOM(Document Object Model)定义访问和处理html文档的标准方法.DOM将html文档呈现为带有元素   ,属性和文本的树结构(节点树) 先来看看 ...

  10. 学习smail注入遇到的坑

    1.将需要被反编译的apk包解开之后,找到MainActivity,然后在OnCreate中添加需要加入注入的smail代码: Java代码: /** * 获取Android id * * @para ...