L2-007 家庭房产 (25 分)
 

给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。

输入格式:

输入第一行给出一个正整数N(≤),随后N行,每行按下列格式给出一个人的房产:

编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积

其中编号是每个人独有的一个4位数的编号;分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0k≤)是该人的子女的个数;孩子i是其子女的编号。

输出格式:

首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:

家庭成员的最小编号 家庭人口数 人均房产套数 人均房产面积

其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出,若有并列,则按成员编号的升序输出。

输入样例:

10
6666 5551 5552 1 7777 1 100
1234 5678 9012 1 0002 2 300
8888 -1 -1 0 1 1000
2468 0001 0004 1 2222 1 500
7777 6666 -1 0 2 300
3721 -1 -1 1 2333 2 150
9012 -1 -1 3 1236 1235 1234 1 100
1235 5678 9012 0 1 50
2222 1236 2468 2 6661 6662 1 300
2333 -1 3721 3 6661 6662 6663 1 100

输出样例:

3
8888 1 1.000 1000.000
0001 15 0.600 100.000
5551 4 0.750 100.000

并查集经典题 要稍微改写一下unite函数

PTA经典特色题目 算法不难 倒腾起来麻烦 还给要整个排序 还考察了STL的用法(= =)

推荐做

unite要改写一下 id最小的作为根节点

 #include <stdio.h>
#include <iostream>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
int N, M, K;
const int si = ;
int par[si];
int cnt[si];
double area[si];
int housenum[si];
bool vis[si];
struct node {
int id, num;
double avgnum, avgarea; }no[si]; bool cmp (node a, node b) {
if (a.avgarea != b.avgarea) return a.avgarea > b.avgarea;
return a.id < b.id;
}
using namespace std; int find(int x) {
if (x == par[x]) return par[x];
return par[x] = find(par[x]);
}
bool same(int x, int y) {
return find(x) == find(y);
}
void unite(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return;
if (x < y) {
par[y] = par[x];
}
else {
par[x] = par[y];
}
}
int main() {
cin >> N;
for (int i = ; i < si; i++) par[i] = i; int f, m, id, k, tp;
for (int i = ; i < N; i++) {
cin >> id >> f >> m >> k;
if (f != -) {
unite(id, f);
vis[f] = ;
}
if (m != -) {
unite(id, m);
vis[m] = ;
}
vis[id] = ;
for (int j = ; j < k; j++) {
scanf("%d", &tp);
unite(id, tp);
vis[tp] = ;
}
cin >> housenum[id] >> area[id];
}
set<int> st;
for (int i = ; i < si; i++) {
if (!vis[i]) continue;
int x = find(i);//这个家庭
cnt[x]++;//人口数++
if (x != i) {
area[x] += area[i];
housenum[x] += housenum[i];
}
st.insert(x);
}
set<int>:: iterator it = st.begin();
int count = ;
while (it != st.end()) {
int x = *it;
no[count].id = x;
no[count].num = cnt[x];
no[count].avgnum = housenum[x] * 1.0 / cnt[x];
no[count++].avgarea = area[x] * 1.0 / cnt[x];
it++;
}
cout << count << endl;
sort (no, no + count, cmp);
for (int i = ; i < count; i++) {
printf("%04d %d %.3f %.3f\n", no[i].id, no[i].num, no[i].avgnum, no[i].avgarea);
}
return ;
}

L2-007 家庭房产 (25 分)的更多相关文章

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

    题目链接 题解:并查集把一个家的并在一起,特殊的一点是编号大的并到小的去.这个题有个坑编号可能为0000,会错数据3和5. 1 #include<bits/stdc++.h> 2 usin ...

  2. PAT L2-007 家庭房产

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

  3. 【刷题-PAT】A1114 Family Property (25 分)

    1114 Family Property (25 分) This time, you are supposed to help us collect the data for family-owned ...

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

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

  5. L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...

  6. 1114 Family Property (25 分)

    1114 Family Property (25 分) This time, you are supposed to help us collect the data for family-owned ...

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

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

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

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

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

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

随机推荐

  1. 毕业设计《项目管理》总结06之ajax的初步使用经验

    1.ajax页面时不能实现下载功能,因为后台下载功能返回的是一个流,而ajax得到后台的数据只能是字符串或字符,所以实现的方法可以: 例如:用js生成一个form,用这个form提交参数,并返回“流” ...

  2. 还能不能愉快地起一个web服务啦?——1st Step!白话http和代码交互的那点儿事儿~

    学写python的时候,我们多多少少都接触到了web程序,然而你有没有想过,当浏览器发送了一个http请求时,等待接收这个请求的后端代码是一种什么样的思想感情? 就像下面这张图里画的一样,后端也许是一 ...

  3. 《Hello world 团队》第二次作业:团队项目选题报告

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验六 团队作业2:团队项目选题 团队名称 <hello--world团队> ...

  4. C博客作业01——分支、顺序结构

    1.本章学习总结 1.1思维导图 本章学习体会及代码量学习体会 1.2.1学习体会 在暑假的时候就有加入新生学习群,对C语言有一定的基础,所以这周的学习相对轻松,但一些细节方面的知识并不是很了解.在这 ...

  5. windows系统下安装rabbitmq教程

    1.简介 安装rabbitmq需要下载软件Erlang语言开发包和RabbitMQ文件包.文件最新下载地址如下: Erlang: https://www.erlang.org/ RabbitMQ: h ...

  6. 基于RabbitMQ rpc实现的主机管理

    要求: 文件分布: 流程图: import pika import os import socket class Server(object): def __init__(self, queuenam ...

  7. Python之AJAX

    AJAX <script> $("#i4").on("click", function () { var i1 = $("#i1" ...

  8. 浏览器如何对HTML5的离线储存资源进行管理和加载

    在线的情况下,浏览器发现html头部有manifest属性,它会请求manifest文件,如果是第一次访问app,那么浏览器就会根据manifest文件的内容下载相应的资源并且进行离线存储.如果已经访 ...

  9. JSP页面传值出现中文乱码的问题

    在接收值的jsp页面代码的body里添加: <%request.setCharacterEncoding("utf-8"); %>  //这里是设置utf-8为jsp页 ...

  10. week3

    ___________________________________函数________________________ 返回值 = 0 ,返回 0 返回值 = 1, 返回object 返回值> ...