题目分析:

  典型的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. QWebView崩溃的问题

    http://www.cnblogs.com/kobe-echo/p/5720765.html#undefined

  2. 禁止网站被别人通过iframe引用

    https://blog.csdn.net/dugujiancheng/article/details/51669164 解决方案一:js方法这种方法不可靠,不推荐使用 <script type ...

  3. Cmd管理员运行

    Cmd管理员运行     C:\Windows\System32  

  4. select * from dim.dim_area_no@to_dw

    应该是建的有database linksdim是用户名,dim_area_no是表名,to_dw 是建的database links的名,dim_area_no表属于dim用户创建database l ...

  5. 关于java Collections.sort 排序

    public static void main(String[] args) { int[] dd = {12,34,46,123,23,2,35,13,543231,65,5645,57}; Arr ...

  6. js 敏感词过滤

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  7. nginx+vue刷新404

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

  8. requests(第三方模块) 请求、登录、下载网页

    import requests  #http://docs.python-requests.org/en/latest/api/ 说明文档 ''' requests.request(method,ur ...

  9. c算法:字符串查找-KMP算法

    /* *用KMP算法实现字符串匹配搜索方法 *该程序实现的功能是搜索本目录下的所有文件的内容是否与给定的 *字符串匹配,如果匹配,则输出文件名:包含该字符串的行 *待搜索的目标串搜索指针移动位数 = ...

  10. linux centos7 安装mono

    1.看官方的命令: 另外一种是下载压缩包解压之后安装: https://apps.fedoraproject.org/packages/mono/ 三.安装Mono需要的GDI+兼容API的库Libg ...