【PAT甲级】1114 Family Property (25分)(并查集)
题意:
输入一个正整数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分)(并查集)的更多相关文章
- PAT甲题题解-1114. Family Property (25)-(并查集模板题)
题意:给出每个人的家庭成员信息和自己的房产个数与房产总面积,让你统计出每个家庭的人口数.人均房产个数和人均房产面积.第一行输出家庭个数,随后每行输出家庭成员的最小编号.家庭人口数.人均房产个数.人均房 ...
- 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 ( ...
- PAT 甲级 1020 Tree Traversals (25分)(后序中序链表建树,求层序)***重点复习
1020 Tree Traversals (25分) Suppose that all the keys in a binary tree are distinct positive intege ...
- PAT 甲级 1146 Topological Order (25 分)(拓扑较简单,保存入度数和出度的节点即可)
1146 Topological Order (25 分) This is a problem given in the Graduate Entrance Exam in 2018: Which ...
- PAT 甲级 1071 Speech Patterns (25 分)(map)
1071 Speech Patterns (25 分) People often have a preference among synonyms of the same word. For ex ...
- 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 ...
- 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 ...
- 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 ...
- PAT 甲级 1048 Find Coins (25 分)(较简单,开个数组记录一下即可)
1048 Find Coins (25 分) Eva loves to collect coins from all over the universe, including some other ...
随机推荐
- 2.Docker Compose 部署应用程序
部署 Tomcat version: '3.1' services: tomcat: restart: always image: tomcat container_name: tomc ...
- 推荐7款用于PHP的代码调试工具,太有用了!
当谈论到服务器端的脚本语言时,大多数人都会首先想到PHP.在你写完代码后,使用一些检查方面的工具是非常有必要的,无论是单纯的代码调试工具,还是测试优化工具.下面就为广大的PHP开发者介绍7个专为PHP ...
- The Number of Inversions(逆序数)
For a given sequence A={a0,a1,...an−1}A={a0,a1,...an−1}, the number of pairs (i,j)(i,j) where ai> ...
- element-ui的upload组件的clearFiles方法
<template> <div> <el-button @click="clearFiles">重新上传</el-button> & ...
- LeetCode 860. 柠檬水找零 (贪心)
在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元.你必须给 ...
- 微信小程序之数组操作:push与concat的区别
微信小程序中需要用到数组的操作,push和concat二者功能很相像,但有两点区别. 先看如下例子: var arr = []; arr.push(); arr.push(); arr.push([, ...
- PHP 实现时间戳转化为几分钟前、几小时前等格式
//发布时间提示 function get_last_time($time) { // 当天最大时间 $todayLast = strtotime(date('Y-m-d 23:59:59')); $ ...
- Python目录结构规范
在设计大型项目时需要规范目录结构. 假设你的项目名为foo, 我比较建议的最方便快捷目录结构这样就足够了: Foo/ |-- bin/ | |-- foo | |-- foo/ | |-- tests ...
- AntDesign(React)学习-3 React基础
前面项目已经建起来了,但是没有React基础怎么办,从头学习,这个项目使用的是基于React16.X版本的几种技术集成,那么我们就从网上找一些相关的资料进行研究,我的习惯是用到哪学到哪. 一.先看一些 ...
- mybatis-plus - TableInfo
在前面 的 inject() 方法中, 调用了一个 TableInfoHelper.initTableInfo(builderAssistant, modelClass) 方法, 来获取 表信息: T ...