PAT 天梯赛 L2-007. 家庭房产 【并查集】
题目链接
https://www.patest.cn/contests/gplt/L2-007
思路
将一个家庭里的所有人都并进去
然后最后查找的时候 找到所有同一个家庭的人,计算出人数,人均房产套数,人均房产面积 而且 在ID 小于当前 ID 的时候 要更新
AC代码
#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
const double PI = 3.14159265358979323846264338327;
const double E = 2.718281828459;
const double eps = 1e-6;
const int INF = 0x3f3f3f3f;
const int maxn = 1e6 + 5;
const int MOD = 1e9 + 7;
int pre[10000];
int find(int x)
{
while (pre[x] != x)
x = pre[x];
return x;
}
void join(int x, int y)
{
int fx = find(x), fy = find(y);
if (x != fy)
pre[fx] = fy;
}
struct Node
{
int id;
int total;
int tot;
double ave, area;
}temp, q[maxn];
bool comp(Node x, Node y)
{
if (fabs(x.area - y.area) < eps)
return x.id < y.id;
return x.area > y.area;
}
int main()
{
for (int i = 0; i < 10000; i++)
pre[i] = i;
int n;
cin >> n;
map <int, Node> m;
map <int, int> vis;
for (int i = 0; i < n; i++)
{
int id, a, b, k;
scanf("%d%d%d%d", &id, &a, &b, &k);
vis[id] = 1;
if (a != -1)
{
join(id, a);
vis[a] = 1;
}
if (b != -1)
{
join(id, b);
vis[b] = 1;
}
for (int j = 0; j < k; j++)
{
scanf("%d", &a);
if (a != -1)
{
join(id, a);
vis[a] = 1;
}
}
scanf("%d%d", &a, &b);
m[id].id = id;
m[id].tot = a;
m[id].area = b;
}
map <int, int>::iterator it, iter;
int count = 0;
for (it = vis.begin(); it != vis.end(); it++)
{
temp.id = 0;
temp.tot = 0;
temp.tot = 0;
temp.ave = 0.0;
temp.area = 0.0;
if (it -> second == 1)
{
it -> second = 0;
int flag = find(it -> first);
temp.id = it -> first;
temp.tot += m[it -> first].tot;
temp.area += m[it -> first].area;
temp.total = 1;
for (iter = it, iter++; iter != vis.end(); iter++)
{
if (iter -> second == 1 && flag == find(iter -> first))
{
iter -> second = 0;
if (m[iter -> first].id == iter -> first)
{
if (iter -> first < temp.id)
temp.id = iter -> first;
temp.tot += m[iter -> first].tot;
temp.area += m[iter -> first].area;
}
temp.total ++;
}
}
temp.ave = temp.tot * 1.0 / temp.total;
temp.area /= temp.total;
q[count++] = temp;
}
}
sort (q, q + count, comp);
printf("%d\n", count);
for (int i = 0; i < count; i++)
{
printf("%04d %d %.3lf %.3lf\n", q[i].id, q[i].total, q[i].ave, q[i].area);
}
}
PAT 天梯赛 L2-007. 家庭房产 【并查集】的更多相关文章
- PAT 天梯赛 L2-010. 排座位 【并查集】
题目链接 https://www.patest.cn/contests/gplt/L2-010 思路 因为 题意中 朋友的朋友 就是朋友 那么 朋友的关系 用 并查集 保存 但是 敌对关系 只有直接的 ...
- PATL2-007. 家庭房产-并查集
L2-007. 家庭房产 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定每个人的家庭成员和其自己名下的房产,请你统计出每个 ...
- 天梯赛决赛 L2-1.红色警报 并查集
L2-013. 红色警报 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 战争中保持各个城市间的连通性非常重要.本题要求你编写一 ...
- 天梯赛 L2-010 排座位 (并查集)
布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位.无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席. 输入格式: ...
- L2-007. 家庭房产(并查集)
#include <cstdio> #include <set> #include <vector> #include <algorithm> usin ...
- PAT天梯赛L2-007 家庭房产
题目链接:点击打开链接 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(<=1000),随后N行,每行按下列 ...
- PAT 天梯赛 L2-007 家庭房产
建图+DFS 题目链接:https://www.patest.cn/contests/gplt/L2-007 题解 在热身赛的时候没有做出来,用的并查集的思想,但是敲残了,最后也没整出来.赛后听到别人 ...
- PAT天梯赛 L1-049 天梯赛座位分配
题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...
- PAT天梯赛L3-007 天梯地图
题目链接:点击打开链接 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证对任意的查询请求,地图上都至 ...
- PAT天梯赛练习题——L3-007. 天梯地图(多边权SPFA)
L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...
随机推荐
- ios 使用gcd 显示倒计时
__block ;//倒计时时间 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, ...
- 哇哦!恍然大悟般的“share”功能的实现!
有一个问题一直困扰着我,也是我一直没有时间去了解和学习的,那就是前端(移动端)实现分享到微信.QQ好友.QQ空间.新浪微博等等平台的功能实现,虽然之前有做过,但是都是上一个领导自己写好的,我直接拿来用 ...
- WCF获取元数据
所谓获取WCF的服务元数据(Metadata),归根结点,实际上就是获取服务的终结点(Endpoint)的信息,这是服务公开在外的数据信息,包括Address.Binding与Contract,也就是 ...
- Android中常用布局单位
Android在UI布局时经常用到一些单位,对单位混用直接会影响UI的显示,要想正确的在布局中使用每种单位就必须先真正的熟悉它. UI显示效果的影响因素:屏幕尺寸.屏幕密度.分辨率:而android手 ...
- HDU-1165-Eddy's research II
这个事实上是一个递归题.题目非常easy.m的数非常小.分三种情况.算一下.就能够直接把公式算出来. 当然,也能够用dp做: #include<iostream> #include< ...
- SpringSecurity学习一----------最简单的权限控制系统
© 版权声明:本文为博主原创文章,转载请注明出处 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0& ...
- NFS详细分析
1. NFS服务介绍 1.1什么是NFS服务 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端 ...
- codeforces #364d As Fast As Possible
题意:一群学生,要到离这里为l的地方去.有一辆车,车只有k个座位.人和车的速度分别v1,v2,问你所有人到达的最小时间. 思路:数学题.最小时间就是要求所有同学同时到达.每个同学最多上一次车.那么显然 ...
- 详细的obs操作教程(windows/mac)图解
直播推流软件obs操作配置教程包含支持mac和windows配置 1 2 3 4 5 6 7 8 9
- Eclipse配置总结
按照公司要求,开发环境使用Eclipse Juno版本,需要安装maven插件和RTC插件. 经过一下午的尝试,总结经验教训: 1.eclipse安装maven的m2ec ...