当前位置: 首页 > news >正文

推荐个在广州做网站的广州白云区今天的消息

推荐个在广州做网站的,广州白云区今天的消息,科学城做网站公司,wordpress百度云盘题目 题目大意 共有n个户主,每个户主的房产按照“ 户主id 父亲id 母亲id 孩子个数 孩子的id 房产数 房产面积 ”的格式给出。如果父亲或母亲不存在,值为-1。每个户主及其父亲母亲孩子可以构成一个家庭,不同户主如果有相同的家人,…

题目

题目大意

共有n个户主,每个户主的房产按照“ 户主id 父亲id 母亲id 孩子个数 孩子的id 房产数 房产面积 ”的格式给出。如果父亲或母亲不存在,值为-1。每个户主及其父亲母亲孩子可以构成一个家庭,不同户主如果有相同的家人,那么就可以将两家联系起来组成一个大家庭。要求输出家庭数和家庭id(取家庭中的最小id),平均房产数,平均房产面积。输出按照平均房产面积从大到小排序,如果相同,按id从小到大排序。

思路

从一堆人中组团并求团的个数,并查集。由题可知,户主母亲父亲孩子不管是谁的id都是等价的,它们的共同祖先(家庭id)就是这群人中的最小id(题目中规定的)。每个家庭中的人可以合并,不同家庭中的人也可合并,合并的条件就是看两个人的家庭id是否相同以及一个人是否存在于两个家庭中。pre[]数组即记录每个人对应的家庭id;find()数组找到根节点,即其所属最大家庭的id;combine()合并两个人或集合;init()初始化,完成并查集的建立。另外还需要记录每个人对应的家庭成员数、房产数、房产大小,只有根节点对应的值才有效。

代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int n;
int pre[10000];  // 并查集,记录前驱节点,为家庭id的最小值
vector<int> num(10000, 1);  // 家庭成员数,初始化为1
int amount[10000] = {0};  // 房产数
int area[10000] = {0};  // 房产大小int find(int a){if (pre[a] == a){return a;}else{return pre[a] = find(pre[a]);}
}  // 找某元素的根节点void combine(int a, int b){int root_a = find(a);int root_b = find(b);if (root_a == root_b){return;}if (root_a < root_b){pre[root_b] = root_a;num[root_a] += num[root_b];amount[root_a] += amount[root_b];area[root_a] += area[root_b];}else{pre[root_a] = root_b;num[root_b] += num[root_a];amount[root_b] += amount[root_a];area[root_b] += area[root_a];}
}  // 合并两个不同的集合void init(){cin >> n;for (int i = 0; i < 10000; i++){pre[i] = i;}  // 初始化pre数组for (int i = 0; i < n; i++){int id, f, m, k, amounts, areas;vector<int> p;cin >> id >> f >> m >> k;p.push_back(id);if (f != -1) p.push_back(f);if (m != -1) p.push_back(m);for (int j = 0; j < k; j++){int child;cin >> child;p.push_back(child);}cin >> amounts >> areas;sort(p.begin(), p.end());for (int j = 0; j < (int)p.size(); j++){combine(p[j], p[0]);}  // 合并每一个家庭成员int root = find(id);amount[root] += amounts;area[root] += areas;  // 累加到一个家庭中的根节点}
}struct family{int id;int total;double avg_amount;double avg_area;
};bool cmp(family x, family y){if (x.avg_area == y.avg_area){return x.id < y.id;}return x.avg_area > y.avg_area;
}int main(){init();vector<family> res;for (int i = 0; i < 10000; i++){if (pre[i] == i && (amount[i] > 0 || area[i] > 0)){res.push_back({i, num[i], amount[i] * 1.0 / num[i], area[i] * 1.0 / num[i]});}}sort(res.begin(), res.end(), cmp);cout << (int)res.size() << endl;for (int i = 0; i < (int)res.size(); i++){printf("%04d %d %.3lf %.3lf\n", res[i].id, res[i].total, res[i].avg_amount, res[i].avg_area);}return 0;
}

http://www.hkea.cn/news/433079/

相关文章:

  • 黑龙江省城乡和住房建设厅网站首页百度链接地址
  • 网站模板修改工具专业seo关键词优化
  • 口碑好的句容网站建设yahoo搜索
  • 深圳网站建设外贸公司价格网络营销的背景和意义
  • 长春网站建设硕成传媒seo快速排名优化公司
  • web网站开发能使用c 吗免费建立个人网站申请
  • 织梦网站修改教程视频网站优化培训学校
  • 南沙区交通和建设局网站中国十大网络销售公司
  • 免费建设网站的方法百度网址大全 官网
  • 手机网站设计制作公司微信推广费用一般多少
  • 建设网站需要什么注册域名费用一般多少钱
  • 女性门户网站源码百度指数功能有哪些
  • 怎么帮公司做网站建设谷歌搜索引擎免费入口 香港
  • 请写出网站建设前期需要做的准备外贸定制网站建设电话
  • 南京门户网站建设网络营销优秀案例
  • 2012服务器如何做网站周口网络推广哪家好
  • 贵阳搜索玩的网站网络舆情软件免费入口
  • 前端自己写代码建网站要花多少钱游戏推广在哪里接活
  • 网站建设中+网页代码nba最新排名东西部
  • 东莞企业建设网站官网有限公司百度推广深圳分公司
  • 海外推广工作内容搜索引擎优化seo是什么
  • wordpress 发短信西安网络优化大的公司
  • dreamweaver个人网站南宁求介绍seo软件
  • 网站常用素材企业培训视频
  • 北京市通州区建设委员会网站网站新站整站排名
  • 太原网站推广只选中联传媒推广排名seo
  • 企业网站建设的常见流程为百度互联网营销顾问
  • 养殖企业网站网络营销策划名词解释
  • 如何进行电子商务网站推广?百度网盘app
  • 做情趣网站需要什么资质sem推广外包