首页 > 其他分享 >L2-007 家庭房产

L2-007 家庭房产

时间:2024-03-15 09:00:40浏览次数:17  
标签:10000 no int isexist mj L2 编号 房产 007

后面每个家族最小编号不知道怎么处理,就没做出来。
然后去翻阅blog,发现差不多是两种方案,第一种在融合的时候让编号小的当根节点,那么最终这个家族的祖先就是编号最小的节点。
第二种就是融合的时候没处理,到后面处理(看起来好麻烦)。
下面就是第一种写法(注:结构体中的id没用,可以删了)。

#include <bits/stdc++.h>
using namespace std;
struct node {
	int id,rs;//编号,家庭人数
	double mj,ts;//面积 套数
} s[10000];
int parent[10000],deep[10000];
int isexist[10000];//编号是否存在
bool cmp(int a,int b) {
	if(s[a].mj!=s[b].mj) return s[a].mj>s[b].mj;
	return a<b;
}
int getf(int x) {
	int y=x;
	while(parent[y]!=-1) {
		y=parent[y];
	}
	return y;
}
void merge(int x,int y) {
	int p1=getf(x);
	int p2=getf(y);
	if(p1==p2) return;
	if(p1<p2) {
		swap(p1,p2);
	}
	parent[p1]=p2;//p2是小的那个 让小的那个当父亲 最后这个家族的祖先就是最小索引的节点
}
int main() {
	memset(parent,-1,sizeof(parent));
	memset(deep,0,sizeof(deep));
	int n;
	cin>>n;
	for(int i=0; i<n; i++) {
		int no,p1,p2,count,ch,ts,mj;
		cin>>no>>p1>>p2>>count;
		isexist[no]=1;
		if(p1!=-1) {
			merge(no,p1);
			isexist[p1]=1;
		}
		if(p2!=-1) {
			merge(no,p2);
			isexist[p2]=1;
		}
		for(int j=0; j<count; j++) {
			cin>>ch;
			isexist[ch]=1;
			merge(no,ch);
		}
		cin>>s[no].ts>>s[no].mj;//该编号的房产套数 和总资产
	}
	for(int i=0; i<10000; i++) {//汇总家族的人数 房产套数和总资产
		if(isexist[i]) {
			int parent=getf(i);
			if(parent==i) {
				s[parent].rs+=1;
			} else {
				s[parent].mj+=s[i].mj;
				s[parent].ts+=s[i].ts;
				s[parent].rs+=1;
			}
		}
	}
	vector<int> ans;//存放每个家族的祖先的编号
	for(int i=0; i<10000; i++) {
		if(isexist[i]) {
			int parent=getf(i);
			if(parent==i) {
				s[i].mj/=s[i].rs;//计算人均
				s[i].ts/=s[i].rs;
				ans.push_back(i);
			}
		}
	}
	//对ans进行排序
	cout<<ans.size()<<'\n';
	sort(ans.begin(),ans.end(),cmp);
	for(int i=0; i<ans.size(); i++) {
		printf("%04d %d %.3lf %.3lf\n",ans[i],s[ans[i]].rs,s[ans[i]].ts,s[ans[i]].mj);
	}
	return 0;
}

标签:10000,no,int,isexist,mj,L2,编号,房产,007
From: https://www.cnblogs.com/chengyiyuki/p/18074433

相关文章

  • 【ARMv8】异常级别的定义EL0、EL1、EL2、EL3
    ExceptionlevelsARMv8-A系列定义了一系列的异常等级,从EL0到EL3,下面具体说明其含义:ELn中,随着n的增加,软件的执行权限也相应的增加;EL0被称为无特权执行;EL2提供了对虚拟化的支持EL3提供了安全状态切换功能(安全状态与非安装状态之间的切换)异常级别的切换在AARCH64状态下,异常......
  • L2-005 集合相似度
    法一(暴力超时21分)纯暴力,最后一个测试点超时。#include<bits/stdc++.h>usingnamespacestd;vector<set<int>>dataset;intmain(){ intn; cin>>n; dataset.resize(n+1);for(inti=1;i<=n;i++){ intcount,data; cin>>count; fo......
  • L2-003 月饼
    背包。#include<bits/stdc++.h>usingnamespacestd;structnode{ doublekc,sj; doubleavg;}s[1010];boolcmp(noden1,noden2){ returnn1.avg>n2.avg;}intmain(){ intn,total; cin>>n>>total; for(inti=0;i<n;i++){ cin>>......
  • 2.4GHz小型超高性能模块:LBEE5XV2EA-802、LBEE5PA1LD-005、LBES5PL2EL-923、LBWA0ZZ2DS
    1、描述:2EA型是一款基于CYW55573组合芯片组的小型超高性能模块,支持Wi-Fi802.11a/b/g/n/AC/ax2×2MIMO蓝牙5.3BR/EDR/le高达1.2Gbps的Wi-FiPHY数据速率和3Mbps的传统蓝牙PHY数据速率(EDR)以及2Mbps的PHY蓝牙LE数据速率。WLAN部分支持PCIe3.0第二代和SDIO3.0接口,蓝牙部分支持......
  • C# EPPlus导出dataset----Excel2绘制图像
    一、生成折线图方法 ///<summary>    ///生成折线图    ///</summary>    ///<paramname="worksheet">sheet页数据</param>    ///<paramname="colcount">总列数</param>    ///<paramname="......
  • L2-002 链表去重(25分)
    代码真的好烂啊。一个元素加入之前,修改集合中(va,vb)最后一个元素的下一个地址为当前元素的地址。然后我是把(元素地址,下一个地址)和(元素的值)拆开放到两个集合了,放一个里面有点麻烦不太会处理。#include<bits/stdc++.h>usingnamespacestd;intvis[10010];//是否已经来过ve......
  • L2-001 紧急救援
    这道题就是在dijkstra的基础上增加了一些东西。代码有参考别人,最后一步的处理很好。#include<bits/stdc++.h>usingnamespacestd;constintmaxv=0x7fffffff;intedges[510][510];//从i到j的长度intdist[510];//最短路径boolcheck[510];//是否在集合之中intnum[510......
  • python基于flask房产中介房屋供求系统django毕业设计项目lw附源码
    本设计要设计一个简单的网页,在研究的过程中具体有以下5个步骤:下面简要分析房产中介系统的业务:(1)注册、登录:注册普通账号登录。(2)用户个人信息修改:登录后可以修改用户的基本信息,也可以退出。(3)用户留言管理:用户填写留言的主题、联系人、电话、邮箱、留言内容。 (4)房屋......
  • L2-033 简单计算器(Python)
    作者 陈越单位 浙江大学本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 S1​ 存放数字,另一个堆栈 S2​ 存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:从 S1​ 中弹......
  • win11安装wsl2没有网络解决方法
    1、启用hyper-v2、打开hyper-v管理器-点击虚拟交换机管理器-先看下有无一个名为WSL(这个名字可以被修改,和下面对应就行)的虚拟交换机,有的话先设置为外部网络3、编辑%USERPROFILE%.wslconfig添加如下内容[wsl2]networkingMode=bridgedvmSwitch=WSLipv6=true12344、执行wsl-......