PAT-L2-007 家庭房产 (union-find) 小数据 没有什么是暴力解决不了的!!
题目分析:
典型的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) 小数据 没有什么是暴力解决不了的!!的更多相关文章
- pat 团体天梯赛 L2-007. 家庭房产
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产 ...
- 团体程序设计天梯赛-练习集L2-007. 家庭房产
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- L2-007. 家庭房产
L2-007. 家庭房产 题目链接:https://www.patest.cn/contests/gplt/L2-007 并查集 初学,看这题的时候完全没有什么好的想法,参考了@yinzm的blog用 ...
- L2-007 家庭房产 (25 分)
L2-007 家庭房产 (25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤),随后N行,每行按下 ...
- L2-007. 家庭房产(并查集)*
L2-007. 家庭房产 参考博客 #include <iostream> #include <cstdio> #include <cstring> #includ ...
- 天梯赛 L2-007. (并查集) 家庭房产
题目链接 题目描述 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式 ...
- PATL2-007. 家庭房产-并查集
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- python2与python3的区别 ,小数据池 bytes 类型
一.python2和3的区别 在python3中 在python2中 print('ab')方式打印内容()括号是必须要有的. print 'ab' 可以加可以不加. 只有range 有ran ...
- day4-python基础-小数据池以及深浅copy浅讲
今天的目录是 1.小数据池 2.深浅copy 正文开始 1.小数据池 在说明今天的内容前,先说明一个在今天重复用到的一个知识点 ###比较’=’俩边的数据是否完全相同,以及判断一个对象的内存地址是否完 ...
随机推荐
- 转 cousera computational neuroscience week5 学习笔记(part 1)
(2013-08-14 14:58:41) 转载▼ 标签: 学习笔记 it 很久没有写博文了,之所以重新写还是因为看了coursera的computational neuroscience之后,发现这 ...
- 【内存泄漏】 C/C++内存泄漏及其检测工具
对于一个c/c++程序员来说,内存泄漏是一个常见的也是令人头疼的问题.已经有许多技术被研究出来以应对这个问题,比如 Smart Pointer,Garbage Collection等.Smart Po ...
- 网口扫盲二:Mac与Phy组成原理的简单分析
1. general 下图是网口结构简图.网口由CPU.MAC和PHY三部分组成.DMA控制器通常属于CPU的一部分,用虚线放在这里是为了表示DMA控制器可能会参与到网口数据传输中. MAC(Medi ...
- 初学Linux系统最应该做对的4件事情[长文]
“闲来无事,逛逛贴吧”已经是本人无事消磨时间的最佳选择了.五花八门的问题,各式各样的回答,总能给自己带来无限的欢乐.当然也有些问题值得自己去思考或者回答.之前就有人在贴吧里问到“Linux好难啊!该怎 ...
- Java代理:静态代理、动态代理
要理解动态代理,需要先理解反射(http://www.cnblogs.com/Donnnnnn/p/7729443.html) 通俗理解: 在很多底层框架中都会用得到,比如struts,Spring等 ...
- 字符与字符串3——char 的大小
字符变量占用内存的大小,也就是char类型声明的变量,这个变量占多少字节. 一字节 char c = 'A'; printf("%d,%d\n", sizeof(c),sizeof ...
- 自动化创建tornado项目
tornado目录结构: index.py 入口文件 app app目录 |___ __init__.py 初始化脚本 |___ templates 模板目录 | |___ index ...
- 线程安全的集合类、CopyOnWrite机制介绍(转)
看过并发编程的书,这两种机制都有所了解,但不扎实其实.看到别人的博客描述的很精辟,于是转过来,感谢! 原文链接:https://blog.csdn.net/yen_csdn/article/detai ...
- shell中环境变量
Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量. 所以管理环境变量的文件也分为系统级和用户级的, ...
- Gym - 100989M(dp)
George met AbdelKader in the corridor of the CS department busy trying to fix a group of incorrect e ...