输入:

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

解题思路:

首先我们要对输入的数据进行处理,这里我们是将所有有关系的两个人的编号全部存放到一个二元组中,对于处理出来的二元组,用并查集来进行维护,注意在用并查集进行合并的时候,要将编号大的合并到编号小的节点上,然后将大编号节点上的信息加到小结点上,这样就完成了同一个家庭的合并和信息的更新,然后我们就要遍历所有可能出现过的编号,因此我们要将所有出现过的编号开一个数组额外标记一下,这里的标记主要在两个地方,一个是对二元组里的两个编号分别标记,另一种情况是如果这个家庭中只有一个人,那么这个人在二元组中就不会出现,所以要在输入的时候就要进行标记。

最后将我们需要输出的信息弄成一个结构体,将这些结构体放到一个vector中,然后按照题目要求进行排序,最后输出结果即可。

#include <bitsdc++.h>
using namespace std;
const int N=1e5+10;
int p[N],peo[N],n,idx,tao[N],s[N];
pair<int,int>e[100010];
bool st[N];
struct node{int bian;int num;int tao;int sq;
};
bool cmp(node a,node b)
{if((double)a.sq/a.num!=(double)b.sq/b.num)return (double)a.sq/a.num>(double)b.sq/b.num;elsereturn a.bian<b.bian;
}
int find(int x)
{if(x!=p[x])p[x]=find(p[x]);return p[x];
}
void merge(int x,int y)
{int fx=find(x);int fy=find(y);if(fx!=fy){int minv=min(fx,fy),maxv=max(fx,fy);p[maxv]=minv;peo[minv]+=peo[maxv];tao[minv]+=tao[maxv];s[minv]+=s[maxv];}
}
int main()
{for(int i=0;i<N;i++){p[i]=i;peo[i]=1;}cin>>n;int id,fa,ma,k;for(int i=1;i<=n;i++){cin>>id>>fa>>ma>>k;if(fa!=-1)e[++idx]={id,fa};if(ma!=-1)e[++idx]={id,ma};st[id]=true;//有可能这个家庭只有这个人自己 for(int j=1;j<=k;j++){int x;cin>>x;e[++idx]={id,x};}cin>>tao[id]>>s[id];}for(int i=1;i<=idx;i++){merge(e[i].first,e[i].second);st[e[i].first]=1;st[e[i].second]=1;}vector<node>ans;for(int i=0;i<N;i++)if(st[i]&&(p[i]==i))ans.push_back({i,peo[i],tao[i],s[i]});sort(ans.begin(),ans.end(),cmp);cout<<ans.size()<<endl;for(int i=0;i<ans.size();i++)printf("%04d %d %.3lf %.3lf\n",ans[i].bian,ans[i].num,(double)ans[i].tao/ans[i].num,(double)ans[i].sq/ans[i].num);return 0;
}

L2-007 家庭房产相关推荐

  1. CCCC L2 007 家庭房产 并查集

    最开始看到这个题,想不到只用并查集,在某一个如果同时又两个其他家庭包括的人怎么办,所有开了一个home类,想通过Home之间的合并解决这个问题,最后由于内容过于庞大而超时. 参考网上的思路用并查集可以 ...

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

    PTA 家庭房产 (图论,暴搜) 题目详情: 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N ...

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

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

  4. 7-56 家庭房产 (25 分)

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

  5. L2-007. 家庭房产

    L2-007. 家庭房产 题目链接:https://www.patest.cn/contests/gplt/L2-007 并查集 初学,看这题的时候完全没有什么好的想法,参考了@yinzm的blog用 ...

  6. 【CCCC】L2-007 家庭房产 (25分),并查集,结构统计

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

  7. 7-11 家庭房产(25 分) 【并查集】

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

  8. pta l2-7(家庭房产)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题意:给定n个人的信息,包括其编号 ...

  9. L2-007. 家庭房产-PAT团体程序设计天梯赛GPLT

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

  10. 数据结构与算法A实验六图论---7-6 家庭房产(并查集)

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

最新文章

  1. Consul入门03 - 注册服务
  2. 基于.NET Standard的分布式自增ID算法--美团点评LeafSegment
  3. Python使用select实现异步通信
  4. Dubbo管理控制台dubbo-admin搭建
  5. 索引超出矩阵维度怎么修改程序_seo怎么学?seo自己能学会吗?
  6. 【机器学习】无监督学习--(降维)主成分分析PCA
  7. ./mysql-bin.index_MySQL 启动报错:File ./mysql-bin.index not found (Errcode: 13)
  8. 学无止境,我还在进步
  9. ❤️作为测试行业的过来人,宝贵的经验分享给刚入行的你
  10. OSG仿真案例(0)
  11. Atitit 效率提升法细则 v3 t028.docx Atitit 提升效率细则 目录 1. 目标 2 1.1. 配置化增加扩展性 尽可能消除编译 方便增加 调整业务逻辑 2 1.2. 统一接口
  12. linux登陆命令行,如何使用linux命令行登陆
  13. iPhone的来电铃声
  14. grub引导安装win10
  15. C++如何实现二进制数据存储为灰度图
  16. spark hint中Broadcast Hints、COALESCE and REPARTITION Hints
  17. M5683T OLT--HGU ONU配置指导(Port映射方式)
  18. 赤兔四足机器人的作用_中国唯一能跑跳的“赤兔”机器人,拿下全球学生设计评选桂冠!...
  19. Win10中docker的安装与使用
  20. 《数据访问 - 第01章 文件 - 文件和流的概念》

热门文章

  1. 20100921_Dawning_字符窜计算
  2. 一首绝对震撼人心冲击你灵魂的完美音乐The Mass 【MV】
  3. 2021年B证(安全员)考试总结及B证(安全员)多少钱
  4. localStorage.setItem() 缓存功能
  5. android os 怎么删除,安卓自带软件怎么删?一键删除系统软件
  6. Mac无法挂载exfat磁盘怎么办?
  7. raiders storm 苹果_搏击长空:风暴突击队 Sky Gamblers - Storm Raiders for Mac v1.3.0
  8. scrapy爬取京东的数据
  9. 微信用什么留住用户量?
  10. html延时属性css,CSS属性参考 | transition-delay