题目链接
https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872
视频讲解https://www.bilibili.com/video/BV1nT4y1v7n3/
思路我们能获取 N
条信息,对于每一条消息我们能知道当前这个人的编号id
以及父亲的编号 faa
母亲的编号 ma
并且知道 k
个儿子的编号,然后我们又知道这个人的房子的总套数以及房子的总面积 ,这其实是一个很经典的数据结构-》 并查集,我们维护的每一个集合就是一个家族,我们讲当前读入的这个人的父亲和母亲合并在一个集合里面,再将他和他的儿子合并在一起,然后记录一下这个人的房子套数以及房子的总面积就好了,最后我们从
0
0
0往
9999
9999
9999 遍历,将这些访问过的编号的值加在祖先元素上面,这里我们用的一个map存储每个家族的数据,最后我们将其放入数组或者容器中排序即可,具体可以参见代码。
#include
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair
#define INF 0x3f3f3f3f
const int N = 1e4+10;
int n,fa[N];
bool vis[N];
struct Node{
double tao,area;
};
struct ANS{
int id,people;
double tao,area;
};
bool cmp(ANS a,ANS b) {
if(fabs(a.area - b.area)
关注
打赏