题意:

输入一个正整数N(<=10000),接着输入N行每行包括一个人的ID和他双亲的ID以及他的孩子数量和孩子们的ID(四位整数包含前导零),还有他所拥有的房产数量和房产面积。输出一共有多少个块(所有有父子关系的点都视为处于同一块),以及每块的元素个数以及平均每人分得的房产数量和房产面积(保留三位小数),输出顺序按照房产面积降序,第二优先以ID升序。

AAAAAccepted code:

 #define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int ba[];
int per[];
int sets[],area[];
int num[];
int child[];
int find_(int x){
if(ba[x]==x)
return x; return ba[x]=find_(ba[x]);
};
typedef struct{
int id,num;
double avgsets,avgarea;
}st;
st ans[];
int vis[];
int flag[];
bool cmp(st a,st b){
if(a.avgarea!=b.avgarea)
return a.avgarea>b.avgarea;
return a.id<b.id;
}
int main(){
//ios::sync_with_stdio(false);
//cin.tie(NULL);
//cout.tie(NULL);
for(int i=;i<;++i)
ba[i]=i,num[i]=;
int n;
scanf("%d",&n);
for(int i=;i<=n;++i){
memset(flag,,sizeof(flag));
int id;
scanf("%d",&id);
int x=,y=,z=;
x=find_(id);
int fa,mo;
scanf("%d%d",&fa,&mo);
if(fa!=-)
y=find_(fa);
if(mo!=-)
z=find_(mo);
int root=min(x,y);
root=min(root,z);
int k;
scanf("%d",&k);
int mn=;
for(int j=;j<=k;++j){
scanf("%d",&child[j]);
mn=min(mn,find_(child[j]));
vis[child[j]]=;
}
int tsets,tarea;
scanf("%d%d",&tsets,&tarea);
sets[x]+=tsets;
area[x]+=tarea;
if(mn<root)
root=mn;
if(x!=root)
flag[x]=,num[root]+=num[x],sets[root]+=sets[x],area[root]+=area[x];
if(y!=root&&y!=&&!flag[y])
flag[y]=,num[root]+=num[y],sets[root]+=sets[y],area[root]+=area[y];
if(z!=root&&z!=&&!flag[z])
flag[z]=,num[root]+=num[z],sets[root]+=sets[z],area[root]+=area[z];
ba[x]=root;
if(y<)
ba[y]=root;
if(z<)
ba[z]=root;
for(int j=;j<=k;++j){
int temp=find_(child[j]);
ba[temp]=root;
if(temp!=root&&!flag[temp]){
flag[temp]=;
num[root]+=num[temp];
sets[root]+=sets[temp];
area[root]+=area[temp];
}
}
vis[id]=;
if(fa!=-)
vis[fa]=;
if(mo!=-)
vis[mo]=;
}
int cnt=;
for(int i=;i<;++i){
if(ba[i]==i&&vis[i]){
ans[++cnt].id=i;
ans[cnt].num=num[i];
ans[cnt].avgsets=1.0*sets[i]/num[i];
ans[cnt].avgarea=1.0*area[i]/num[i];
}
}
sort(ans+,ans++cnt,cmp);
printf("%d\n",cnt);
for(int i=;i<=cnt;++i){
printf("%04d %d %.3lf %.3lf",ans[i].id,ans[i].num,ans[i].avgsets,ans[i].avgarea);
if(i<cnt)
printf("\n");
}
return ;
}

【PAT甲级】1114 Family Property (25分)(并查集)的更多相关文章

  1. PAT甲题题解-1114. Family Property (25)-(并查集模板题)

    题意:给出每个人的家庭成员信息和自己的房产个数与房产总面积,让你统计出每个家庭的人口数.人均房产个数和人均房产面积.第一行输出家庭个数,随后每行输出家庭成员的最小编号.家庭人口数.人均房产个数.人均房 ...

  2. PAT甲级1114. Family Property

    PAT甲级1114. Family Property 题意: 这一次,你应该帮我们收集家族财产的数据.鉴于每个人的家庭成员和他/她自己的名字的房地产(房产)信息,我们需要知道每个家庭的规模,以及他们的 ...

  3. PAT甲级——1114 Family Property (并查集)

    此文章同步发布在我的CSDN上https://blog.csdn.net/weixin_44385565/article/details/89930332 1114 Family Property ( ...

  4. PAT 甲级 1020 Tree Traversals (25分)(后序中序链表建树,求层序)***重点复习

    1020 Tree Traversals (25分)   Suppose that all the keys in a binary tree are distinct positive intege ...

  5. PAT 甲级 1146 Topological Order (25 分)(拓扑较简单,保存入度数和出度的节点即可)

    1146 Topological Order (25 分)   This is a problem given in the Graduate Entrance Exam in 2018: Which ...

  6. PAT 甲级 1071 Speech Patterns (25 分)(map)

    1071 Speech Patterns (25 分)   People often have a preference among synonyms of the same word. For ex ...

  7. PAT 甲级 1063 Set Similarity (25 分) (新学,set的使用,printf 输出%,要%%)

    1063 Set Similarity (25 分)   Given two sets of integers, the similarity of the sets is defined to be ...

  8. PAT 甲级 1059 Prime Factors (25 分) ((新学)快速质因数分解,注意1=1)

    1059 Prime Factors (25 分)   Given any positive integer N, you are supposed to find all of its prime ...

  9. PAT 甲级 1051 Pop Sequence (25 分)(模拟栈,较简单)

    1051 Pop Sequence (25 分)   Given a stack which can keep M numbers at most. Push N numbers in the ord ...

  10. PAT 甲级 1048 Find Coins (25 分)(较简单,开个数组记录一下即可)

    1048 Find Coins (25 分)   Eva loves to collect coins from all over the universe, including some other ...

随机推荐

  1. php外挂python脚本抓取ajax数据

    之前我写过一遍php外挂python脚本处理视频的文章.今天和大家分享下php外挂python实现输入关键字搜索的脚本 首先我们先来分析一波网站: http://www.dzdpw.com/s.php ...

  2. 全网VIP视频解析接口

    全网VIP视频在线解析可以免费观看[腾讯vip视频.爱奇艺vip视频.优酷VIP视频.土豆VIP视频.乐视VIP视频.芒果VIP视频]等等...可以vip免费观看.去广告等等. https vip视频 ...

  3. GYCTF 盲注【regexp注入+时间盲注】

    考点:regexp注入+时间盲注 源码: <?php # flag在fl4g里 include 'waf.php'; header("Content-type: text/html; ...

  4. python的循环语句

    python的循环语句有两种:for 和 while,for循环是对可迭代对象进行迭代并处理,因此for的对象是一个可以迭代的对象,而while循环的条件则是一个布尔值可以是一个返回布尔值的表达式. ...

  5. aws申请ec2实例后如何用root用户登录

    ec2默认禁用root用户登录,我们创建ec2实例后如何知道使用什么用户登录,有两种方法? 方法一:根据我们选择的镜像来判断用什么用户登录:镜像:centos 用户centos镜像:aws 用户:ec ...

  6. dubbox生产者与消费者案例

    一.首先要将dubbox添加到本地maven仓库     参考: https://blog.csdn.net/try_and_do/article/details/83383861     二.目录结 ...

  7. MySql 存储大量长字节 Text报错处理办法

    今天线上版本的错误: Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Row size too large ...

  8. redis 列表类型list

    列表类型(list)1.插入 左侧插入 :lpush key value1 value2 value3... 右侧插入: lpush key value1 value2 value3... 在指定元素 ...

  9. python3练习100题——028

    原题链接:http://www.runoob.com/python/python-exercise-example28.html 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁.问第4 ...

  10. Mac使用pip命令安装selenium包报错解决方法

    1.使用命令:  pip install selenium 2.换成命令: python -m pip install selenium 即可成功安装