PTA 家庭房产 (图论,暴搜)

题目详情:
给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。

输入格式:
输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产:

编号 父 母 k 孩子1 … 孩子k 房产套数 总面积
其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。

输出格式:
首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:

家庭成员的最小编号 家庭人口数 人均房产套数 人均房产面积
其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出,若有并列,则按成员编号的升序输出。

输入样例:
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
输出样例:
3
8888 1 1.000 1000.000
0001 15 0.600 100.000
5551 4 0.750 100.000

解题思想:对于一个家族,其父母和儿子都可以直接无向图建立,用一个house和area数组存储自己的房产套数和总面积。(同时用have数组记录是否存在这个人,便于后面直接从0遍历到9999)。然后深搜,有几个不连通图就有几个家族,深搜途中记录这个家族的房产套数、总面积和人数即可。同时为了后面排序显示,用了一个结构体来存储每个家族信息。

#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N=1e4+5;
vector<int>adj[N];
int n;
//用来记录答案
struct node{int no;int num;double house;double area;
}ans[N];
//存储个人信息的数组以及一些便于dfs更新答案的全局遍历~_~
int House[N],Area[N],Thouse,Tarea,vis[N],have[N],cnt,num,no,sum;
void dfs(int x){//处理家族成员信息num++;no=min(no,x); vis[x]=1;Thouse+=House[x];Tarea+=Area[x];for(int i=0;i<adj[x].size();i++){int u=adj[x][i];if(!vis[u])dfs(u);}
}
//按照题意排序输出
bool cmp(node &x,node &y){if(abs(x.area-y.area)<1e-5){return x.no<y.no;}return x.area>y.area;
}
int main()
{cin>>n;for(int i=0;i<n;i++){int no,f1,f2,k,son;cin>>no>>f1>>f2;have[no]=1;//建立无向图,记得要先判断是否存在哦if(f1!=-1){adj[no].push_back(f1);adj[f1].push_back(no);have[f1]=1;}if(f2!=-1){adj[no].push_back(f2);adj[f2].push_back(no);have[f2]=1;}cin>>k;while(k--){cin>>son;adj[son].push_back(no);adj[no].push_back(son);}cin>>House[no]>>Area[no]; }//呃呃,暴力遍历吧for(int i=0;i<=9999;i++)if(have[i]&&!vis[i]){sum++;Thouse=Tarea=num=0;no=9999;dfs(i);//记录记录记录,最重要的一步!ans[cnt].num=num;ans[cnt].no=no;ans[cnt].house=1.0*Thouse/num;ans[cnt++].area=1.0*Tarea/num;}sort(ans,ans+cnt,cmp);//终于到了输出答案的时候啦printf("%d\n",sum);for(int i=0;i<cnt;i++)printf("%04d %d %.3lf %.3lf\n",ans[i].no,ans[i].num,ans[i].house,ans[i].area);return 0;
}

PTA 家庭房产 (图论,暴搜)相关推荐

  1. 算法提高课-图论-单源最短路的综合应用-AcWing 1135. 新年好:dijkstra和dfs暴搜结合

    题目分析 来源:acwing 分析: 先预处理出从1,a,b,c,d,e出发到其他所有点的单源最短路.存在二维数组dist[6][N]中 dfs暴搜所有拜访顺序,共有5!种,对于每一种拜访顺序,可以通 ...

  2. C++学习之路 | PTA(天梯赛)—— L2-007 家庭房产 (25分)(带注释)(并查集)(精简)

    L2-007 家庭房产 (25分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按 ...

  3. 紫书 习题7-14 UVa 307(暴搜+剪枝)

    这道题一开始我想的是在排序之后只在头和尾往中间靠近来找木块, 然后就WA, 事实证明这种方法是错误的. 然后参考了别人的博客.发现别人是直接暴搜, 但是加了很多剪枝, 所以不会超时. 我也想过这个做法 ...

  4. 子矩阵(暴搜(全排列)+DP)

    子矩阵(暴搜(全排列)+DP) 一.题目 子矩阵 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 [提交][状态][讨论版] 题目描述 给出如下定义: 1. 子矩阵:从一 ...

  5. hdu4982 暴搜+剪枝(k个数和是n,k-1个数的和是平方数)

    题意:       给你两个数n,k问你是否怎在这样一个序列:      (1)这个序列有k个正整数,且不重复.      (2)这k个数的和是n.      (3)其中有k-1个数的和是一个平方数. ...

  6. hdu4848 DFS 暴搜+ 强剪枝

    题意:       给你一个图,然后问你从1出发遍历所有的点的距离和是多少,这里的距离和是每一个点到1的距离的总和,不是选择一条遍历所有点的路径的总长度,时间限制是 8000ms. 思路:       ...

  7. PAT甲级1119 Pre- and Post-order Traversals (30分):[C++题解]暴搜dfs、前序遍历和后序遍历求中序遍历

    文章目录 题目分析 题目链接 题目分析 分析 给了前序遍历和后序遍历,能够确定根结点,但是左子树和右子树的长度是不确定的.这里采用的解决方案是枚举左子树的结点个数,其实右子树的结点个数也确定了.对于每 ...

  8. Leetcode5635. 构建字典序最大的可行序列[C++题解]:dfs暴搜

    文章目录 题目 题目链接 题目 题目重述:给定一个数n,求一个长度为2n-1的序列:1只出现一次,2~n之间每个数出现2次,并且 对于2 ~n之间的每个数i,两个i之间相差为i,比如n=3,[3,1, ...

  9. HDU - 6185 Covering(暴搜+递推+矩阵快速幂/杜教BM)

    题目链接:点击查看 题目大意:规定宽度为4,给定长度为n,求用1*2和2*1的瓷砖,将其完全铺满能有多少种方法. 分析:自从学会了矩阵快速幂之后,看到1e18的数据量都会下意识的往递推上面想,但是以前 ...

最新文章

  1. 只讲关键点之兼容100+种关键点检测数据增强方法
  2. c语言adc采集取平均值,读取ADC值的浮动平均值
  3. 处理WinForm多线程程序时的陷阱(摘自网络)
  4. Error:Internal error: org.gradle.tooling.BuildException: Could not run build action using Gradle dis
  5. JS 小知识点汇总
  6. linux调度程序是根据进程的动态优先级还是静态优先级来调度进程的,LINUX内核面试题...
  7. Citrix XenServer 6.5 发布
  8. 京东:应届博士生年薪最高达200万元!确认过眼神,是我羡慕不来的人
  9. MPLS ××× Carrier Supporting Carrier Option AB(二)
  10. iis7 64位 操作excel的一系列问题(未完待续)
  11. Java设计模式学习记录-解释器模式
  12. pytorch.max()的详细解释
  13. (转)Android text文字阴影设置
  14. ospf 几种LSA类型的总结
  15. MIPI D-PHY IP 使用说明(二)
  16. 为啥好多公司面试程序员用纸写代码?不会是因为缺少笔记本电脑吧
  17. 用计算机用于几何定理的证明,几何定理机器证明
  18. 超好用的iOS设备管理软件——iMazing
  19. oracle用户 expire,Oracle用户expired
  20. Dell Latitude E6400找不到Broadcom USH及Contacted SmartCard驱动

热门文章

  1. mysql2013年8月怎么打出来_2020年8月31日,上周完成了一个查询接口来检查mysql的数据,速度很慢,20200831,从,MySQL,中查,贼...
  2. 计算机系统数据保存期限,官方数据:U盘数据通常可以保存多长时间
  3. springboot+kafka(ip地址瞎写的)
  4. k8s的imagePullSecrets如何生成及使用
  5. web 监听器 过滤器等组件
  6. mysql用户权限与安装Linux操作系统
  7. 《中国人工智能学会通讯》——11.52 基于直推式学习的异质人脸图像 合成
  8. Swift - 简单的原生与网页交互
  9. Xcode中Objc动态调用方法同时避免警告的几个办法
  10. python操作mongodb数据库