题目分析:

  典型的union-find 算法

  想法: 先不着急 union 因为每一个人的房产信息不知道 所以先输入所有信息 同时保留与自己有关系的每一个人

待初始化每一个人的房产信息后,再union

 #include <bits/stdc++.h>
using namespace std;
const int N=1e5+;
struct T {
int id;
int p_n;
int w_n;
int sum;
double avg;
};
T a[N];
int father [N];
bool isok[N];//这个号码是否出现
vector < vector <int> > g(N);// 保存每一个与自己有关系的人
int n;
int _find (int x) {
if (father[x]!=x)
father[x]=_find(father[x]);
return father[x];
}
bool cmp (T x,T y) {
if (x.avg==y.avg)
return x.id<y.id;
return x.avg>y.avg;
}
int main ()
{
for (int i=;i<N;i++) {
father[i]=i;
a[i].p_n=;
a[i].w_n=a[i].sum=;
}
scanf ("%d",&n);
for (int i=;i<=n;i++) {
int id,f_id,m_id,k;
scanf ("%d %d %d %d",&id,&f_id,&m_id,&k);
isok[id]=;
if (f_id>=) { isok[f_id]=; g[id].push_back(f_id);}
if (m_id>=) { isok[m_id]=; g[id].push_back(m_id);}
for (int j=;j<=k;j++) {
int x; scanf ("%d",&x);
isok[x]=;
g[id].push_back(x);
}
scanf ("%d %d",&a[id].w_n,&a[id].sum);
}
for (int i=;i<N;i++)
if (isok[i]) {
for (int j=;j<g[i].size();j++) {
int next=g[i][j];
int k1=_find(i);
int k2=_find(next);
if (k1<k2) {
father[k2]=k1;
a[k1].p_n+=a[k2].p_n;
a[k1].w_n+=a[k2].w_n;
a[k1].sum+=a[k2].sum;
}
else if (k1>k2){
father[k1]=k2;
a[k2].p_n+=a[k1].p_n;
a[k2].w_n+=a[k1].w_n;
a[k2].sum+=a[k1].sum;
}
}
}
T ans[]; int t=;
for (int i=;i<N;i++) {
if (isok[i]&&father[i]==i) {
ans[++t]=a[i];
ans[t].id=i;
ans[t].avg=(double) a[i].sum/a[i].p_n;
}
}
printf ("%d\n",t);
sort (ans+,ans+t+,cmp);
for (int i=;i<=t;i++)
printf ("%04d %d %.3lf %.3lf\n",ans[i].id,ans[i].p_n,(double)ans[i].w_n/ans[i].p_n,ans[i].avg);
return ;
}

PAT-L2-007 家庭房产 (union-find) 小数据 没有什么是暴力解决不了的!!的更多相关文章

  1. pat 团体天梯赛 L2-007. 家庭房产

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产 ...

  2. 团体程序设计天梯赛-练习集L2-007. 家庭房产

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...

  3. L2-007. 家庭房产

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

  4. L2-007 家庭房产 (25 分)

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

  5. L2-007. 家庭房产(并查集)*

    L2-007. 家庭房产 参考博客 #include <iostream> #include <cstdio> #include <cstring> #includ ...

  6. 天梯赛 L2-007. (并查集) 家庭房产

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

  7. PATL2-007. 家庭房产-并查集

    L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...

  8. python2与python3的区别 ,小数据池 bytes 类型

    一.python2和3的区别 在python3中 在python2中 print('ab')方式打印内容()括号是必须要有的.   print 'ab' 可以加可以不加. 只有range   有ran ...

  9. day4-python基础-小数据池以及深浅copy浅讲

    今天的目录是 1.小数据池 2.深浅copy 正文开始 1.小数据池 在说明今天的内容前,先说明一个在今天重复用到的一个知识点 ###比较’=’俩边的数据是否完全相同,以及判断一个对象的内存地址是否完 ...

随机推荐

  1. spring事务管理(详解和实例)

    原文地址: 参考地址:https://blog.csdn.net/yuanlaishini2010/article/details/45792069 写这篇博客之前我首先读了<Spring in ...

  2. am335x system upgrade uboot sd boot(一)

    由于上层应用的需求,需要运行arm docker,在kernel3.2上面还不支持,且编译器的glibc版本比较低的问题,故需要做系统升级 新的内核4.14.40驱动开发和以往有很大的不同,关键在于d ...

  3. 尚学堂java 参考答案 第八章

    一.选择题 1.BD 解析:B:Integer是对象,所以默认的应该是null对象.D使用的是自动装箱 2.A 解析:String类的对象是final型,是不能修改的,concat()方法是生成一个新 ...

  4. 认识微软Visual Studio Tools for AI

    认识微软Visual Studio Tools for AI   微软已经发布了其 Visual Studio Tools for AI 的测试版本,这是微软 Visual Studio 2017 I ...

  5. Java 集成开发环境的介绍及下载

    集成开发环境(integrated development environment,JDE) 之前成功运行了Java小程序是经历了先在笔记本中编写源代码,然后通过命令行运行打开javac编译源文件, ...

  6. Linux如何从零开始搭建rsync+serync服务器(centOS6)

    一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增加.删除 ...

  7. SQL-21 查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序

    题目描述 查找所有员工自入职以来的薪水涨幅情况,给出员工编号emp_no以及其对应的薪水涨幅growth,并按照growth进行升序CREATE TABLE `employees` (`emp_no` ...

  8. python笔记2-变量

    变量 存东西所用 #定义变量 name='feifei'#定义变量,字符串 age=18.9#整型或者小数定义变量不需要加引号 print(name) print(age) name2="w ...

  9. linux 常用重启

    sudo reboot 为最常用重启 Linux centos关机与重启命令详解与实战 Linux centos重启命令: 1.reboot 普通重启 2.shutdown -r now 立刻重启(r ...

  10. Chrome浏览器录屏扩展插件

    Chrome浏览器录屏扩展插件,可以录制网页操作或者桌面操作.生成MP4 Loom https://chrome.google.com/webstore/detail/loom-video-recor ...