[patl2-007]家庭房产
题目大意:求并查集中集合的个数,及每个集合的详细信息
解题关键:只要不进行unite,集合的根是不会变化的。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<iostream>
using namespace std;
struct node{
int id,cnt,area;
}pe[];
struct nod{
int id,num,cnt,area;
double avcnt,avar;
}pa[];
bool vis[];
int par[];
int find1(int x){
if(x==par[x]) return x;
else return par[x]=find1(par[x]);
}
bool cmp(nod x,nod y){
if(x.avar==y.avar) return x.id<y.id;
else return x.avar>y.avar;
}
void unite(int x,int y){
x=find1(x);
y=find1(y);
if(x==y) return;
else par[x]=y;//为什么这里改变一下会有变化???
}
int main(){
int n;
scanf("%d",&n);
for(int i=;i<;i++){
par[i]=i;
}
for(int i=;i<n;i++){
int t1,t2,t3;
scanf("%d%d%d",&t1,&t2,&t3);
vis[t1]=true;
if(t2!=-){
unite(t1, t2);
vis[t2]=true;
}
if(t3!=-){
unite(t1,t3);
vis[t3]=true;
}
int k;
scanf("%d",&k);
for(int j=;j<k;j++){
int temp;
scanf("%d",&temp);
unite(t1,temp);
vis[temp]=true;
}
pe[i].id=t1;
int t4,t5;
scanf("%d%d",&t4,&t5);
pe[i].cnt=t4;
pe[i].area=t5;
} for(int i=;i<n;i++){
int id=find1(pe[i].id);
//id=find1(id);
pa[id].cnt+=pe[i].cnt;
pa[id].area+=pe[i].area;
// pa[id].num++;
} for(int i=;i<=;i++){//这里是核心
if(vis[i]){
//int t=par[i]=find1(i);
int t=find1(i);
if(!pa[t].num){
pa[t].id=i;
}
pa[t].num++;
pa[t].avar=pa[t].area*1.0/pa[t].num;//这里其实是重复覆盖的
pa[t].avcnt= pa[t].cnt*1.0/pa[t].num;
}
} sort(pa,pa+,cmp);
int ans=;
for(int i=;i<;i++){
if(pa[i].num){
ans++;
}
//else break;
}
printf("%d\n",ans);
for(int i=;i<ans;i++){
if(pa[i].num){
printf("%04d %d %.3lf %.3lf\n",pa[i].id,pa[i].num,pa[i].avcnt,pa[i].avar);
}
} }
[patl2-007]家庭房产的更多相关文章
- 团体程序设计天梯赛-练习集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 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- pat 团体天梯赛 L2-007. 家庭房产
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产 ...
- L2-007 家庭房产 (25 分) (并查集)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题目: 给定每个人的家庭成员和其自己名 ...
- PAT L2-007 家庭房产
https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 给定每个人的家庭成员和其自己名下的房产,请你 ...
- pat 团体赛练习题集 L2-007. 家庭房产
给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列格式给出一个人的房产: ...
随机推荐
- 《Advanced Bash-scripting Guide》学习(二):测试脚本调用的参数是否正确
本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 #!/bin/bash E_WRONG_ARGS=85 script_param ...
- kylin_学习_02_kylin使用教程
一. 二.参考资料 1.kylin从入门到实战:实际案例
- nyoj-952-最大四边形 (向量叉乘)
题目链接 /* Name:nyoj-952-最大四边形 Copyright: Author: Date: 2018/4/27 10:46:24 Description: 枚举一条对角线,再选择一个 看 ...
- hdu1398 Square Coins(母函数)
题目类似于整数拆分,很明显用母函数来做. 母函数的写法基本固定,根据具体每项乘式的不同做出一些修改就行了.它的思路是从第一个括号开始,一个括号一个括号的乘开,用c1数组保存之前已经乘开的系数,即c1[ ...
- C++中声明和定义的区别
声明 这有一个与这个名字相关的东西,并且它是这个类型的,告诉编译器我要使用它,并期待它定义在某一个地方. 定义 定义是指提供所有必要的信息(占用内存大小),使其能够创建整个实体. 我们必须明白的: 一 ...
- MySQL实战 | 03 - 谁动了我的数据:浅析MySQL的事务隔离级别
原文链接:这一次,带你搞清楚MySQL的事务隔离级别! 使用过关系型数据库的,应该都事务的概念有所了解,知道事务有 ACID 四个基本属性:原子性(Atomicity).一致性(Consistency ...
- C#面向对象(三):多态
前文链接: C#面向对象(一):明确几个简单的概念作为开胃菜 C#面向对象(二):封装和继承 今天来聊聊面向对象的多态,这部分算是比较重要和核心的,很多工作2年多的程序员其实对于面向对象和多态的理解也 ...
- hashmap&linkedlist
import java.util.HashMap; import java.util.Iterator; public class hashmap1 { public static void main ...
- Unity之将Texture保存成png
http://blog.csdn.net/bingheliefeng/article/details/51177505 using UnityEngine;using System.Collectio ...
- 开放群组架构TOGAF
作于一个架构师尤其是企业架构师来说,丰富的理论知识可以帮助他在架构规划及管理过程中站在更高的角度去看待问题,历史发展原因有很多已成体系的架构理论,TOGAF是近年来比较接地气的,受到了政府和银行业的重 ...