PAT 1114 Family Property
This time, you are supposed to help us collect the data for family-owned property. Given each person's family members, and the estate(房产)info under his/her own name, we need to know the size of each family, and the average area and number of sets of their real estate.
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer N (≤1000). Then N lines follow, each gives the infomation of a person who owns estate in the format:
ID Father Mother k Child1 ⋯Childk Mestate Area
where ID is a unique 4-digit identification number for each person; Father and Mother are the ID's of this person's parents (if a parent has passed away, -1 will be given instead); k (0≤k≤5) is the number of children of this person; Childi 's are the ID's of his/her children; Mestate is the total number of sets of the real estate under his/her name; and Area is the total area of his/her estate.
Output Specification:
For each case, first print in a line the number of families (all the people that are related directly or indirectly are considered in the same family). Then output the family info in the format:
ID M AVGsets AVGarea
where ID is the smallest ID in the family; M is the total number of family members; AVGsets is the average number of sets of their real estate; and AVGarea is the average area. The average numbers must be accurate up to 3 decimal places. The families must be given in descending order of their average areas, and in ascending order of the ID's if there is a tie.
Sample Input:
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
Sample Output:
3
8888 1 1.000 1000.000
0001 15 0.600 100.000
5551 4 0.750 100.000
分析
参考并查集简析
#include<iostream> //并查集的变形
#include<vector>
#include<set>
#include<algorithm>
#include<iomanip>
using namespace std;
struct family{
int id, mid, fid, area, num;
int cid[10];
}data[1005];
struct node{
int id, people;
double num, area;
}ans[10000];
vector<int> peo(10000,0);
set<int> member, vec;
int findfather(int c){
while(c!=peo[c])
c=peo[c];
return c;
}
void Union(int a, int b){
int m=findfather(a);
int n=findfather(b);
if(m<n)
peo[n]=m;
else
peo[m]=n;
}
bool cmp(const node& n1, const node& n2){
return (n1.area!=n2.area?n1.area>n2.area:n1.id<n2.id);
}
int main(){
int n, cn, cnt=0;
cin>>n;
for(int i=0; i<10000; i++)
peo[i]=i;
for(int i=0; i<n; i++){
cin>>data[i].id>>data[i].fid>>data[i].mid>>cn;
member.insert(data[i].id);
if(data[i].fid!=-1){
member.insert(data[i].fid);
Union(data[i].id, data[i].fid);
}
if(data[i].mid!=-1){
member.insert(data[i].mid);
Union(data[i].id, data[i].mid);
}
for(int j=0; j<cn; j++){
cin>>data[i].cid[j];
member.insert(data[i].cid[j]);
Union(data[i].id, data[i].cid[j]);
}
cin>>data[i].num>>data[i].area;
}
for(int i=0; i<n; i++){
int t=findfather(data[i].id);
ans[t].id=t;
ans[t].num+=data[i].num;
ans[t].area+=data[i].area;
vec.insert(t);
}
for(auto it=member.begin(); it!=member.end(); it++)
ans[findfather(*it)].people++;
for(auto it=vec.begin(); it!=vec.end(); it++){
ans[*it].area=double(ans[*it].area/ans[*it].people);
ans[*it].num=double(ans[*it].num/ans[*it].people);
cnt++;
}
sort(ans, ans+10000, cmp);
cout<<cnt<<endl;
for(int i=0; i<cnt; i++)
cout<<setw(4)<<setfill('0')<<ans[i].id<<" "<<ans[i].people<<" "<<setiosflags(ios::fixed)<<setprecision(3)<<ans[i].num<<" "<<ans[i].area<<endl;
return 0;
}
PAT 1114 Family Property的更多相关文章
- PAT 1114 Family Property[并查集][难]
1114 Family Property(25 分) This time, you are supposed to help us collect the data for family-owned ...
- PAT甲级1114. Family Property
PAT甲级1114. Family Property 题意: 这一次,你应该帮我们收集家族财产的数据.鉴于每个人的家庭成员和他/她自己的名字的房地产(房产)信息,我们需要知道每个家庭的规模,以及他们的 ...
- PAT甲级——1114 Family Property (并查集)
此文章同步发布在我的CSDN上https://blog.csdn.net/weixin_44385565/article/details/89930332 1114 Family Property ( ...
- 1114 Family Property (25 分)
1114 Family Property (25 分) This time, you are supposed to help us collect the data for family-owned ...
- PAT (Advanced Level) 1114. Family Property (25)
简单DFS. #include<cstdio> #include<cstring> #include<cmath> #include<vector> # ...
- PAT甲题题解-1114. Family Property (25)-(并查集模板题)
题意:给出每个人的家庭成员信息和自己的房产个数与房产总面积,让你统计出每个家庭的人口数.人均房产个数和人均房产面积.第一行输出家庭个数,随后每行输出家庭成员的最小编号.家庭人口数.人均房产个数.人均房 ...
- 【PAT甲级】1114 Family Property (25分)(并查集)
题意: 输入一个正整数N(<=10000),接着输入N行每行包括一个人的ID和他双亲的ID以及他的孩子数量和孩子们的ID(四位整数包含前导零),还有他所拥有的房产数量和房产面积.输出一共有多少个 ...
- 1114 Family Property
This time, you are supposed to help us collect the data for family-owned property. Given each person ...
- PAT A1114 Family Property
用并查集处理每个家庭的信息,注意标记~ #include<bits/stdc++.h> using namespace std; ; bool visit[maxn]={false}; i ...
随机推荐
- VS2010 使用TeeChart绘图控件 - 之二 - 绘制图形(折线图,柱状图)
1.前期准备 具体可见VS2010 使用TeeChart绘图控件 - 之一 控件和类的导入 1. 1 添加TeeChart控件,给控件添加变量m_TeeChart 添加TeeChart控件,右击控件, ...
- bzoj2242 [SDOI2011]计算器——BSGS
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2242 第一次写BSGS,参考了好多好多博客: 然而看到的讲解和模板是一种写法,这道题的网上题 ...
- Countries in War(强连通分量及其缩点)
http://poj.org/problem?id=3114 题意:有n个城市,m条边,由a城市到b城市的通信时间为w,若a城市与b城市连通,b城市与a城市也连通,则a,b城市之间的通信时间为0,求出 ...
- [Swift通天遁地]二、表格表单-(3)在表格中嵌套另一个表格并使Cell的高度自适应
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- win10 激活方法 (各版本)
很多人都在找Win10专业版永久密钥,其实win10激活码不管版本新旧都是通用的,也就是说一个win10专业版key,可以同时激活windows10专业版1809.1803.1709.1703.160 ...
- drawable的文件名大写
drawable的文件名大写导致的R文件消失!!!1
- Python学习(一)-在VS上搭建开发环境
1.到官网下载最新Python 注意:虽然目前大部分应用是Python2写的,但Python3必定会成为以后的主流 不管选择学习哪个,了解pyhton2和pyhton3的差异是必须的 2.安装Pyth ...
- OFDM同步算法之Park算法
park算法代码 训练序列结构 T=[\(C\) \(D\) \(C^{*}\) \(D^{*}\)],其中C表示由长度为N/4的复伪随机序列PN,ifft变换得到的符号序列 \(C(n) = D(N ...
- 【转】Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...
- react杂记
React webpack+react (hello world) 项目结构: src: app.js main.js package.json webpack_dev_config.js 需要安装包 ...