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行,每行按下列格式给出一个人的房产: ...
随机推荐
- [ios2]警告:Block的Retain Cycle的解决方法 【转】
<span style="background-color: rgb(248, 248, 248); font-family: 'PT Sans', Geogia, Baskervil ...
- Server Tomcat v6.0 at localhost was unable to start within 45 seconds
在eclipse里启动tomcat的时候出现以下的错误: Server Tomcat v6.0 at localhost was unable to start within 45 seconds. ...
- hdu1038
#include <stdio.h> #define P 3.1415927 #define toFeet(x) x/12.0 #define toMiles(x) x/5280.0 in ...
- python2.x urllib2和urllib的使用
1.最简单用法 urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,...) import urllib2 import ur ...
- C语言:SQLITE3的学习
Sqlite基础学习 一.sqlite的概念 SQLite是一款轻型数据库,是遵守ACID的关系型数据库管理系统,由C语言开发设计.Sqlite的设计目标着眼于嵌入式领域,所以具有占用系统资源低和处理 ...
- oracle_sequence用法
1. About Sequences(关于序列) 序列是数据库对象一种.多个用户可以通过序列生成连续的数字以此来实现主键字段的自动.唯一增长,并且一个序列可为多列.多表同时使用.序列消除了串行化 ...
- C#如何实现url短地址?C#短网址压缩算法与短网址原理入门
c# url短地址压缩算法与短网址原理的例子,详细介绍了短网址的映射算法,将长网址md5生成32位签名串,分为4段,每段8个字节,然后生成短网址,具体见文本实例. 短网址映射算法: 将长网址md5生成 ...
- 使用 Python Mock 类进行单元测试
数据类型.模型或节点——这些都只是mock对象可承担的角色.但mock在单元测试中扮演一个什么角色呢? 有时,你需要为单元测试的初始设置准备一些“其他”的代码资源.但这些资源兴许会不可用,不稳定,或者 ...
- brew install nvm
brew install nvm mkdir ~/.nvm nano ~/.bash_profilectrl+x 退出 source ~/.bash_profile echo $NVM_DIR nvm ...
- 我喜欢的快捷键 webstorm
1.打开设置 ctrl+alt+s 2.重命名 rename ctrl+r