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.小数据池 在说明今天的内容前,先说明一个在今天重复用到的一个知识点 ###比较’=’俩边的数据是否完全相同,以及判断一个对象的内存地址是否完 ...
随机推荐
- kali菜单中各工具功能
一.说明 各工具kali官方简介(竖排):https://tools.kali.org/tools-listing 安装kali虚拟机可参考:https://www.cnblogs.com/lsdb/ ...
- 码云git使用四(分支的创建,使用和合并)
我们在使用git的时候,一般都不是直接在主代码中开发, 通常我们做的操作是创建一个分支,我们在分支上开发,开发完毕,在提交到主代码中. 我们现在学习创建分支,合并分支. 1.首先我们下载到本地都是在主 ...
- toolTip(用svg制作出富有动态的对话框)
昨晚看了用svg如何制作富有动态的tooltip,于是今天就心血来潮学着做一下,于是也成功做出来,也明白其中的原理,收获颇多阿!接下来要多去学习svg,这是个好东西. 这其中也注意了一些平时纠结的细节 ...
- Java Web(十一) 文件上传与下载
文件上传 上传的准备工作 表单method必须为post 提供file组件 设置form标签的enctype属性为multipart/form-data,如果没有设置enctype属性,浏览器是无法将 ...
- bzoj2055
题解: 似乎是放在费用流里的 然而是有上下界的网络流QAQ 代码: #include<bits/stdc++.h> using namespace std; ; int n,m,x,min ...
- 小程序之setData特殊情况 三种情况的wx:if
比如data{ “a”:{}, "b":{} } 你想完成这样的结构 //创建一个对象 var readyData={} //对象[key] =另一个对象 readyData[ke ...
- 《图解TCP/IP》读书笔记(转)
reference: https://www.cnblogs.com/edisonchou/p/5987827.html 一.国际惯例:书托 这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TC ...
- centos7配置hadoop集群
一:测试环境搭建规划: 主机名称 IP 用户 HDFS YARN hadoop11 192.168.1.101 hadoop NameNode,DataNode NodeManager hadoop1 ...
- oracle 正则表达式 匹配
oracle 正则表达式 在实际应用中,想排除带有中文的字段值: select h.froomnumber from t_broker_house h where REGEXP_LIKE(froomn ...
- django面试题必问
1.谈谈你对http协议的认识. HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议.它可以使浏览器更加高效,使 ...