【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 ...
随机推荐
- mac anyconnect 卸载方法
打开终端: 输入下面的命令 sudo /opt/cisco/vpn/bin/vpn_uninstall.sh 有问题 端口占用 sudo /opt/cisco/anyconnect/bin/webse ...
- ASP.NET Identity系列教程-3【运用ASP.NET Identity】
https://www.cnblogs.com/r01cn/p/5180892.html 14 运用ASP.NET Identity In this chapter, I show you how t ...
- npm常用模块之cross-env使用
更多npm常用模块使用请访问:npm常用模块汇总 cross-env这是一款运行跨平台设置和使用环境变量的脚本. 为什么需要cross-env? NODE_ENV=production像这样设置环境变 ...
- HTML5,从零开始
一.网页的组成部分 <!DOCTYPE html> <html> <head> <title>这是标题</title> <meta c ...
- Codeforces #454 div1 C party(状态压缩bfs)
题意: 给你N个点的一幅图,初始图中有M条边,每次操作可以使得一个点连接的所有点变成一个团,问你最少多少次操作可以使得整个图变成一个团. 解法: 因为N很小 所以我们可以二进制压缩来表示一个点与其他点 ...
- vue踩坑:vue+ element ui 表单验证有值但验证失败。
一.如图:有值但是验证失败 二. <el-form :model="form" :rules="rules"> <el-form-item l ...
- maven - 一键删除maven仓库无效jar包工具
背景 在进行maven开发时,往往需要下载大量jar包,而由于网络不稳定等其他因素可能导致jar未下载完毕,然后保留了lastUpdated文件,导致无法更新失效的jar包. 现在提供个bat脚本,只 ...
- java性能分析 - CPU飙高分析工具
背景 有处理过生产问题的同学基本都能遇到系统忽然缓慢,CPU突然飙升,甚至整个应用请求不可用.当出现这种情况下,在不影响数据准确性的前提下,我们应该尽快导出jstack和内存信息,然后 ...
- jdk1.8的HashMap和ConcurrentHashMap
原文地址:https://my.oschina.net/pingpangkuangmo/blog/817973 本文针对jdk1.8的ConcurrentHashMap 1 1.8的HashMap设计 ...
- Unity网络通讯(一)获取计算机的MAC地址
1 string GetMac() { string mac = ""; mac = GetMacAddressBySendARP(); return mac; } [DllImp ...