当前位置: 首页 > 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.yayakq.cn/news/278229/

相关文章:

  • 如何设计网站制作方案线上运营思路
  • 网站开发课程技术培训做网站需要多少资金
  • 易语言做钓鱼网站桐柏县建设局网站
  • 广州专业网站改版微网站制作提供商推荐
  • 公司网站公司微商推广哪家好
  • 合肥免费招聘网站wordpress主题博客一号
  • 中英文网站模板下载温州好的网站推广
  • 网站建设一般多少钱要如何选择网络推广最好的网站
  • 做律师网站房产信息网站
  • 网站建站公司有必要做吗昆山建设银行交学费的网站
  • 网站描述作用连衣裙一起做网站
  • 优秀个人网站欣赏徐州网站
  • 网站建设使用的技术泽成seo网站排名
  • 无锡高端网站设计开发那些公司做网站
  • 校园网站设计开题报告自建网站和第三方平台
  • 河南网站建站系统平台网络营销是传销吗
  • 网站做直播需要什么资质无限个网站虚拟空间
  • 局网站建设自查手机自己制作文字配图
  • 做网站开发需要学什么软件不忘初心网站建设
  • 蒙阴网站优化建公司网站建设明细报价表
  • 如何搭建一个网站平台北京网站优化经理
  • wap网站在线生成appvr 做的网站
  • 用c 做的网站怎么打开路由器做网站终端
  • 亚马逊店铺网站建设费用新泰房产网
  • 优秀网站作品下载做机械外贸什么网站好
  • 一元购网站的建设如何保存网站上的图片不显示图片
  • 低价网站建设资讯做网站推广的企业
  • 网站会说话长沙优化网站推广
  • dede资讯类网站模板wordpress模板首页图片
  • 专做特产的网站广州h5设计网站公司