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行,每行按下列格式给出一个人的房产: ...
随机推荐
- Java中修饰符
下面这张图应该大家都见过,根据图表来记忆最好理解 范围 private friendly(默认) protected public 当前类 √ √ √ √ 当前包中的类 √ √ √ 当前包中的类, ...
- 移动开发meta集合【精】
以下是开发中经常用到的meta标签 1.移动webAPP的Meta 用法: <meta content="width=device-width, initial-scale=1.0, ...
- 【锋利的Jquery】读书笔记十一
项目进度太赶,天天公司加班12小时,没时间看书充电.2016年再更新一篇吧.现在凌晨2点36分. 2017加油哦 jquery合适的选择器 $("#id") 无疑是最佳提高性能的方 ...
- linux kernel 编译
lin
- 循序渐进看Java web日志跟踪(2)-Java日志API认识
接触过Java的朋友应该都会知道,java的开源框架百花齐放,实现同样的功能,总能找到几个强大的开源框架来进行选择.在日志方面,Java同样不逊色.除了JDK本身自带的简单的日志工具,java还有如l ...
- 整理一些css在使用中的小技巧(进行中)
1. 消除li排列display:inline-block的间隙 ul{ font-size:; } ul li{ display:inline-block; }
- [UWP小白日记-6]页面跳转过度动画
前言 在学习中发现页面导航默认是没有过度动画的,直接就导航过去太粗暴了( ̄へ ̄),于是打算上动画结果不言而喻自己进了坑完全不懂动画,然后就是各种疯狂(´・_・`)的搜索资料看了后终于有点头绪. 再后来 ...
- iOS缓存
存储缓存: 第三方应用只能把信息保存在应用程序的沙盒中.因为缓存数据不是用户产生的,所以它应该被保存在NSCachesDirectory,而不是NSDocumentsDirectory.为缓存数据创建 ...
- 调用ZoomEye API获取信息
最近在提高自己编程能力,拿一些实用的小工具练下.该脚本为python语言,主要涉及模块urllib,json,os模块. 功能:调用ZoomEye API获取信息 import urllib.requ ...
- JQ怎么跳出 each循环
return false;——跳出所有循环:相当于 javascript 中的 break 效果. return true;——跳出当前循环,进入下一个循环:相当于 javascript 中的 con ...