1114 Family Property (25 分)
1114 Family Property (25 分)
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
输出就是 每个集合中id最小的, 总共多少套房子, 平均每人的房子数量和平均每人的房子面积,
先按照平均每人的房子面积从大到小输出 如果相等的话 那么就按照id从小到大输出
思路:并查集的题 ,这题水 就是处理有一点点烦
代码:
#include<bits/stdc++.h>
using namespace std;
struct node{int upset,squ,cnt;node(){cnt = 1;upset = 0;squ = 0;}
}s[10005];
struct GG{double cnt,upset,squ;int id;
};
int pre[10005];
bool flag[10005]; //刚开始不都是false 如果有出现就true
int find(int x){if( x == pre[x])return x;return pre[x] = find(pre[x]);
}
void merge(int x, int y){int fx = find(x);int fy = find(y);if(fx > fy)pre[fx] = fy;else if(fx < fy)pre[fy] = fx; return;
}
bool cmp(GG a, GG b){if(a.squ != b.squ)return a.squ > b.squ;else return a.id < b.id;
}
int main(){int n;scanf("%d", &n);for(int i = 1; i <= 10000; i ++)pre[i] = i;int me, fa, mo, cnt, child;for(int i = 1; i <= n; i ++){scanf("%d %d %d",&me,&fa,&mo);flag[me] = true; if(fa != -1){merge(me, fa);flag[fa] = true;} if(mo != -1){merge(me, mo);flag[mo] = true;} scanf("%d",&cnt);for(int j = 1; j <= cnt; j ++ ){scanf("%d",&child); merge(child, me);flag[child] = true;} scanf("%d %d",&s[me].upset, &s[me].squ);}set<int>st;for(int i = 10000; i >= 0; i--) //这边wa了第四个测试点因为0---10000 我写成1----10000{if(flag[i] == true){int x = find(i);//找到它的祖先st.insert(x);if(x != i){s[x].cnt += s[i].cnt;s[x].squ += s[i].squ;s[x].upset += s[i].upset; }}}set<int>::iterator it = st.begin();vector<GG>vec;while(it!=st.end()){GG gg;gg.id = *it;gg.cnt = s[*it].cnt;gg.squ =s[*it].squ * 1.0 / s[*it].cnt * 1.0;gg.upset = s[*it].upset * 1.0 / s[*it].cnt * 1.0;vec.push_back(gg);it++;}sort(vec.begin(),vec.end(),cmp);printf("%d\n",vec.size());for(int i = 0 ; i < vec.size(); i++)printf("%04d %.0lf %.3lf %.3lf\n",vec[i].id, vec[i].cnt,vec[i].upset, vec[i].squ);return 0;
}
1114 Family Property (25 分)相关推荐
- C++学习之路 | PTA(甲级)—— 1114 Family Property (25分)(带注释)(并查集)(精简)
1114 Family Property (25分) This time, you are supposed to help us collect the data for family-owned ...
- 1114 Family Property (25分) (并查集) 复杂题 经典并查集
This time, you are supposed to help us collect the data for family-owned property. Given each person ...
- 1114 Family Property (25 分)【难度: 中/ 知识点: 并查集】
https://pintia.cn/problem-sets/994805342720868352/problems/994805356599820288 挺好的一个并查集,先读入然后再处理.注意:在 ...
- 1114. Family Property (25)-PAT甲级真题(并查集)
This time, you are supposed to help us collect the data for family-owned property. Given each person ...
- 1114. Family Property (25)
//给定 id id的父亲 id的母亲(-1表示过世) k id的k个孩子 房产的数量 房产的面积 //求每个家庭(用最小的id存储)房产的总数 平均房产数量和面积(平均保留三位) //排序:平均面积 ...
- 12门课100分直博清华!这份成绩单冲上热搜,但学霸小伙也曾考过25分
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 金磊 明敏 发自 凹非寺 量子位 报道 | 公众号 QbitAI 一 ...
- PTA 7-3 旅游规划 (25分)(双权值Dijkstra最短路)
7-3 旅游规划 (25分) 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条路 ...
- PTA 03-树1 树的同构 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...
- 【PAT (Advanced Level) Practice】1051 Pop Sequence (25 分)
1051 Pop Sequence (25 分) Given a stack which can keep M numbers at most. Push N numbers in the order ...
- 【PAT (Advanced Level) Practice】1093 Count PAT‘s (25 分)
1093 Count PAT's (25 分) The string APPAPT contains two PAT's as substrings. The first one is formed ...
最新文章
- SAP--DEBUG--外部断点的设置
- Python入门教程以及资料免费下载
- Building Paragon in Unreal Engine 4 - GDC 2016
- 如何监控Android电视桌面,androidTV 电视桌面的效果
- AAA验证和ciscorescue v4.2 验证服务器的搭建(telnet方式和级别的设置)
- F#学习:类型的定义和使用语法
- php apache 多进程,php多进程 防止出现僵尸进程 如何 使 apache 成为 僵尸进程
- iOS 解决报错 dyld: Library not loaded: @rpath/xxx.framework Reason: image not found
- Servlet总结1---基础东西的介绍
- 云豹直播源码v8.2
- 项目管理中如何应对用户频繁的需求变更?
- 书摘—跟鬼谷子学处世 跟菜根谭学修身
- 关于diskpart的命令问题记录
- 【BLE】蓝牙数据速率
- wkhtmltopdf 中文参数详解
- FPGA学习笔记_ROM核调用与调试
- c3p0连接池拿不到连接导致系统崩溃的问题解决
- OpenFOAM量纲及常用物理量的表达形式
- 【OCR系列之一】字符识别技术总览
- matlab振荡环节的频率特性,自动控制原理_典型环节的频率特性教材教学课件.ppt...