首页 > 其他分享 >8.3打卡

8.3打卡

时间:2023-08-03 21:56:16浏览次数:48  
标签:8.3 int father st ++ 打卡 root id

L2-007 家庭房产

#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
using namespace std;
struct fam
{
int id,num;
double avg1,avg2;
};
const int N = 10000;
int father[N];
int root[N];
bool cmp(struct fam a,struct fam b)
{
if(a.avg2 != b.avg2)
return a.avg2 > b.avg2;
else
return a.id < b.id;
}
void Init()
{
for(int i = 0; i < N; i++)
{
father[i] = i;
}
}
int Find(int a)
{
while(father[a] != a)
a = father[a];
return a;
}
void Union(int a,int b)
{
int fa = Find(a);
int fb = Find(b);
if(fa > fb)
father[fa] = fb;
else if(fa < fb)
father[fb] = fa;
}
int main()
{
int n;
scanf("%d",&n);
Init();
map<int,int> mp1;
map<int,int> mp2;
map<int,int> mp3;
map<int,int> mp4;
map<int,int> mp5;
set<int> st;
for(int i = 0; i < n; i++)
{
int id,dad,mom,k;
scanf("%d%d%d%d",&id,&dad,&mom,&k);
st.insert(id);
if(dad != -1)
{
st.insert(dad);
Union(id,dad);
}
if(mom != -1)
{
st.insert(mom);
Union(id,mom);
}
for(int j = 0; j < k; j++)
{
int child;
scanf("%d",&child);
Union(id,child);
st.insert(child);
}
int house,area;
scanf("%d%d",&house,&area);
mp1[id] = house;
mp2[id] = area;
}
set<int>::iterator it;
int count = 0;
for(it = st.begin(); it != st.end(); it++)
{
int temp = Find(*it);
if(root[temp] == 0)
count++;
root[temp]++;
if(mp1[*it])
{
mp3[temp] += mp1[*it];
mp4[temp] += mp2[*it];
}
}
vector<fam> v(count);
int t = 0;
for(int i = 0; i < N; i++)
{
if(root[i])
{
v[t].id = i;
v[t].num = root[i];
v[t].avg1 = mp3[i] * 1.0 / root[i];
v[t].avg2 = mp4[i] * 1.0 / root[i];
t++;
}
}
sort(v.begin(),v.end(),cmp);
printf("%d\n",count);
for(int i = 0; i < count; i++)
{
printf("%04d %d %.3lf %.3lf\n",v[i].

标签:8.3,int,father,st,++,打卡,root,id
From: https://www.cnblogs.com/0608lin/p/17604580.html

相关文章

  • 8.3面试题目和经验总结
    目录一、Python中如何把字符串倒过来1.使用切片2.使用reverse()3.使用join()4、使用for循环5.小结一、Python中如何把字符串倒过来在Python中,想要把字符串倒过来其实并不复杂,可以通过切片、reverse()、join()等方法来实现。1.使用切片在Python中,可以通过反向切片的方式来实现......
  • 8.3 后记
    T1贪心,按\(a\)递增排序后选择连续一段对\(b\)做前缀和\(preb\)区间\([l,r]\)价值为\(preb_r-preb_{l-1}-(a_r-a_l)\)其中\(preb_{l-1}+a_l\)可以\(O(n)\)预处理最小值枚举\(r\)即可,复杂度\(O(n)\)T2\(dp_{i,j}\)表示长度为\(i\),有\(j\)个顶对每次插入......
  • 2023.8.3
    学习java中的类面向对象与面向过程面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象:强调具备了功能的对象,以类/对象为最小单位类与对象的关系类:对一类事物的描述,是抽象的、概念上的定义对象:是实际存在的该类事物的每个个体,因而也称为实例(instance)面向对象......
  • 2023.8.3 周四:SQL
    1#SQL语句可以单行或者多行书写,以分号结尾2#MySql数据库的SQL不区分大小写,关键字建议使用大写3#注释:4#单行注释:--注释内容或者#注释内容(MySQL特有)5#多行注释:/*注释内容*/67/*8DDL:操作数据库,表等;9DML:对表中的数据进行增删改;10DQL:对表中......
  • 8.3随记
    8.3随记在Ubuntu系统中修改DNS的两种办法在终端进行修改编辑sudonano/etc/resolv.conf进行修改文件例如:nameserver8.8.8.8,保存并退出就行。另外使用vi是可以的,但是一定要加上sudo权限,否则是无法更改的(别问我咋知道的)vi的常用命令::w保存文件但不退出vi:......
  • 8.3做题记录
     ......
  • 数组双指针技巧汇总 [labuladong-刷题打卡 day2]
    https://labuladong.github.io/algo/challenge/ji-chu-tiao-zhan/day02/快慢指针26.删除有序数组中的重复项两个指针分别维护符合条件数组和待删除数组,当快指针移动时将符合条件元素插入已完成数组后即可。通过这两天对双指针的练习,可以发现很多双指针算法其实也是一种迭代算......
  • 前缀和数组技巧 [labuladong-刷题打卡 day3]
    今天是两道前缀和,主要有一维前缀和和二维前缀和,当然扩充到高维也是可以的,只不过状态转移会相对复杂些。这里直接贴一个动态规划的介绍吧:动态规划要素动态规划概念、特点、经典例题和于其它算法思想的比较前缀和其实是备忘录自底向上动态规划算法的一个典型例子,状态转移方程:一......
  • 8.3
    1、推挽形式源极跟随器的电流流向分析分析如图所示为推挽级源极跟随器电路,其中,M1、4、6为pmos.首先,M6的VG接了固定电压,故为恒流源,则左半边支路电流恒定保持不变。其次分析vin变化趋势对输出电流流向的影响,M3的VD与M3的VG变化趋势反相,当vin↑(增大)时,VD3=VG4↓,又因为电流的大小......
  • 8.3
    #include<bits/stdc++.h>usingnamespacestd;intn;vector<int>g[1005];ints=0;inta[1005][1005];boolb[10005];voiddfs(inti){for(intj=1;j<=n;j++){if(a[i][j]==1&&b[j]==false){b[j]=true;......