题目分析:

  典型的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. maven-assembly-plugin

    <build> <finalName>detail</finalName> <plugins> <plugin> <artifactI ...

  2. windows7时间同步设置

    1. 设置同步源 服务器修改为本车的104的ip地址,例如23车,手动输入 96.3.123.104 2. 设置同步周期. 注册表法 在“运行”框输入“Regedit”进入注册表编辑器 这种方法是通过 ...

  3. summary_20th,Nov 2018

    一. 常量: 相对于变量,不改变的量 规定常量名全部大写(实际还是变量) 二:数值的运算符: 1. 算术运算符 +  和,    - 减,    *乘,       / 除(浮点数结果) // 取整, ...

  4. How to calculate bits per character of a string? (bpc) to read

      http://stackoverflow.com/questions/17797922/how-to-calculate-bits-per-character-of-a-string-bpc up ...

  5. Mysql 在 Windows环境下安装:应用程序无法正常启动0xc000007b

    DirectX 修复工具 v3.7增强版 链接: https://pan.baidu.com/s/135pZUNwpXcMZjyLB41sQCg 密码: gtb5

  6. 【转】java提高篇(二)-----理解java的三大特性之继承

    [转]java提高篇(二)-----理解java的三大特性之继承 原文地址:http://www.cnblogs.com/chenssy/p/3354884.html 在<Think in ja ...

  7. java中super关键字的用法

    class Sum { int n; float f() { float sum=0; for(int i=1;i<=n;i++) sum=sum+i; System.out.println(& ...

  8. nginx+vue刷新404

    问题原因:刷新页面时访问的资源在服务端找不到,因为vue-router设置的路径不是真实存在的路径.如上的404现象,是因为在nginx配置的根目录/Data/app/xqsj_wx/dist下面压根 ...

  9. sqlalchem表关联(一对多,一对一,多对多)

    简介: 一:一对多关系 1.表示一对多的关系时,在子表类中通过 foreign key (外键)限制本列的值,然后,在父表类中通过 relationship() 方法来引用子表的类. 2.示例代码: ...

  10. 7.5 C++基本序列式容器

    参考:http://www.weixueyuan.net/view/6402.html 总结: vector可以理解为可以在两端插入.删除数据的数组,它提供了丰富的成员函数,用于操作数据. begin ...