1114 Family Property(25分)

2023-11-02 23:12
文章标签 25 family property 1114

本文主要是介绍1114 Family Property(25分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目翻译:

给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭)。随后按下列格式输出每个家庭的信息:家庭成员的最小编号 家庭人口数 人均房产套数 人均房产面积。其中人均值要求保留小数点后3位。家庭信息首先按人均面积降序输出,若有并列,则按成员编号的升序输出。

题解思路:

并查集或者dfs

代码:

dfs代码:

#include<bits/stdc++.h>
using namespace std;
int N;
struct node {int set = 0, area = 0;
};
node value[10000];//存储结点的值
vector<int> v[10000];//用于表示邻居关系
int visited[10000],rea[10000];//是否访问过,是否是关系网中的结点
struct results {//存储结果int min_id, num, sum1, sum2;
};
vector<results> R;int min_id = 0 , num = 0, S1 = 0, S2 = 0;//用于得到dfs的结果void dfs(int curnode)
{visited[curnode] = 1;if (curnode < min_id)min_id = curnode;for (auto i : v[curnode]){if (visited[i] == 0){dfs(i);num++, S1 += value[i].set, S2 += value[i].area;}}
}bool comp(results r1, results r2)
{if (r1.sum2 / double(r1.num) > r2.sum2 / double(r2.num))return true;else if (r1.sum2 / double(r1.num) == r2.sum2 / double(r2.num))return r1.min_id < r2.min_id;elsereturn false;
}int main()
{cin >> N;int id1, id2, id3, k;for (int i = 0;i < N;i++){cin >> id1 >> id2 >> id3;rea[id1] = 1;node n;if (id2 != -1){rea[id2] = 1;v[id1].push_back(id2);v[id2].push_back(id1);}if (id3 != -1){rea[id3] = 1;v[id1].push_back(id3);v[id3].push_back(id1);}cin >> k;while (k--){int child;cin >> child;v[id1].push_back(child);v[child].push_back(id1);}cin >> value[id1].set >> value[id1].area;}for (int i = 0;i < 10000;i++){if (!visited[i] && rea[i]){min_id = i, num = 1, S1 = value[i].set, S2 = value[i].area;//赋初值dfs(i);results temp;temp.min_id = min_id, temp.num = num, temp.sum1 = S1, temp.sum2 = S2;R.push_back(temp);}}sort(R.begin(), R.end(), comp);cout << R.size() << endl;for (auto i : R)cout <<setw(4)<<setfill('0')<<i.min_id << " " << i.num << " " << fixed << setprecision(3) << i.sum1 / double(i.num) << " " << fixed << setprecision(3) << i.sum2 / double(i.num) << endl;
}

并查集实现;

#include<bits/stdc++.h>
using namespace std;
int N;
struct node {int set = 0, area = 0;
};
node value[10000];
vector<int> v[10000];//邻居关系
int f[10000];//并查集存储结点的父亲节点
vector<int> cv;//输入的最左侧的值
int rea[10000];//区分是否为原始点
struct results {int min_id = 10000, num = 0, sum1 = 0, sum2 = 0, tag = 0;
};
vector<results> R;bool comp(results r1, results r2)
{if (r1.sum2 / double(r1.num) > r2.sum2 / double(r2.num))return true;else if (r1.sum2 / double(r1.num) == r2.sum2 / double(r2.num))return r1.min_id < r2.min_id;elsereturn false;
}int find(int p)
{if (p != f[p]) f[p] = find(f[p]);return f[p];
}int main()
{cin >> N;int id1, id2, id3, k;for (int i = 0;i < N;i++){cin >> id1 >> id2 >> id3;cv.push_back(id1);rea[id1] = 1;if (id2 != -1){v[id1].push_back(id2);rea[id2] = 1;}if (id3 != -1){v[id1].push_back(id3);rea[id3] = 1;}cin >> k;while (k--){int child;cin >> child;v[id1].push_back(child);}cin >> value[id1].set >> value[id1].area;}for (int i = 0;i < 10000;i++)f[i] = i;for (int i = 0;i < cv.size();i++){for (int j = 0;j < v[cv[i]].size();j++){int a = find(cv[i]), b = find(v[cv[i]][j]);if (a != b) f[b] = a;}}map<int, results> R1;for (int i = 0;i < 10000;i++){if (i < R1[find(i)].min_id)R1[find(i)].min_id = i;R1[find(i)].num++;R1[find(i)].sum1 += value[i].set;R1[find(i)].sum2 += value[i].area;}for (int i = 0;i < 10000;i++){if ((R1[find(i)].num >= 2 || (R1[find(i)].num == 1 && rea[i]))&&R1[find(i)].tag==0){R.push_back(R1[find(i)]);R1[find(i)].tag = 1;}}sort(R.begin(), R.end(), comp);cout << R.size() << endl;for (auto i : R)cout << setw(4) << setfill('0') << i.min_id << " " << i.num << " " << fixed << setprecision(3) << i.sum1 / double(i.num) << " " << fixed << setprecision(3) << i.sum2 / double(i.num) << endl;
}

坑点:

这篇关于1114 Family Property(25分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/333949

相关文章

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef‘ of undefined“

vue 父组件调用子组件的方法报错,“TypeError: Cannot read property ‘subDialogRef’ of undefined” 最近用vue做的一个界面,引入了一个子组件,在父组件中调用子组件的方法时,报错提示: [Vue warn]: Error in v-on handler: “TypeError: Cannot read property ‘methods

Cannot read property ‘length‘ of null while opening vscode terminal

同一问题地址:Cannot read property ‘length’ of null while opening vscode terminal 问题描述 One day, 我在ubuntu 18.04下用vscode打开一个项目,并想和往常一样在vscode使用终端,发现报错Cannot read property 'length' of null。 解决 打开setting.jso

2025年25届计算机毕业设计:如何实现高校实验室Java SpringBoot教学管理系统

✍✍计算机毕业编程指导师** ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、Python、微信小程序、大数据实战项目集 ⚡⚡文末获取源码 文章目录 ⚡⚡文末获取源码高校实验室教学管理系统-研究背景高校实验室教学管理系

Android 属性动画(Property Animation)

本文是学习以下三位大神之后,整理的学习笔记,彩蛋在编号6          http://blog.csdn.net/lmj623565791/article/details/38067475          http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html          http://www.tu

智力题:25匹马5条跑道找最快的3匹马,最少需要跑几次?

要找出25匹马中最快的3匹马,使用5条跑道,最少需要跑几次?我们可以通过逐步推理来解决这个问题。 第一步:分组比赛 首先,我们将25匹马分成5组,每组5匹马。每组进行一次比赛,这样我们就有5次比赛的结果。 组1:A1, A2, A3, A4, A5 组2:B1, B2, B3, B4, B5 组3:C1, C2, C3, C4, C5 组4:D1, D2, D3, D4, D5 组

芬兰手游业25年发展史

自2010年Rovio凭借《愤怒的小鸟》成功以来,芬兰的优秀开发者可以说是不断的引领手游潮流,有Frogmid、Seriously这样的小型团队,也有Supercell这样的世界收入冠军。除却收入之外,我们可以发现芬兰开发商的手游绝大多数都是具有独特创意的。 为什么芬兰手游业可以具有如此之大的竞争优势?其他人想要赶上应该怎么做?这个答案从来都不是能够简单作答的,因为它根植于芬兰的行业发展史,所以

Android Property Animation属性动画

本文内容摘自《疯狂Android讲义 第三版-李刚著作》

【python】 @property属性详解

【python】 @property属性详解 一文搞懂python中常用的装饰器(@classmethod、@property、@staticmethod、@abstractmethod…)

uniapp微信小程序开发踩坑日记:Pinia持久化报错Cannot read property ‘localStorage‘ of undefined

插件默认使用 localStorage 实现持久化,小程序端不兼容,需要替换持久化 API import { defineStore } from 'pinia'   export const useCommonStore = defineStore('pack-store', {state: (): State => ({wwInfo: {},globalData: {},timerLoc