PAT A 1114 Family Property (25分)

一、题目概述

依据给定个人房产信息、家族信息,统计:
1、家族数量(有任一种血缘关系即属于同一家族);
2、各家族的:家族代表(全家最小ID)、家族成员数、家族平均房产数、家族平均房产面积。

二、思路

无向图dfs统计。
set作为数据结构存储所有id,实现id升序遍历,则家族遍历起点即家族代表id(最小号id)。

三、代码

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> G[10000], visited(10000, 0), sets(10000), area(10000), id(10000);
struct node
{
    int id, M;
    double avg_sets, avg_area;
};
int cmp(node a, node b)
{
    if(a.avg_area != b.avg_area)
        return a.avg_area > b.avg_area;
    return a.id < b.id;
}
void dfs(int v, node &rec)
{
    visited[v] = 1;
    rec.id = min(v, rec.id);
    ++rec.M;
    rec.avg_sets += sets[v];
    rec.avg_area += area[v];
    for(int i = 0; i < G[v].size(); ++i)
        if(!visited[G[v][i]])
            dfs(G[v][i], rec);
}
int main()
{
    int N;
    vector<node> ans;
    scanf("%d", &N);
    for(int i = 0, p[2], k; i < N; ++i)
    {
        scanf("%d %d %d %d", &id[i], &p[0], &p[1], &k);
        for(int j = 0; j < 2; ++j)
            if(p[j] != -1)
            {
                G[p[j]].push_back(id[i]);
                G[id[i]].push_back(p[j]);
            }
        for(int j = 0, v; j < k; ++j)
        {
            scanf("%d", &v);
            G[v].push_back(id[i]);
            G[id[i]].push_back(v);
        }
        scanf("%d %d", &sets[id[i]], &area[id[i]]);
    }
    for(int i = 0; i < N; ++i)
        if(!visited[id[i]])
        {
            node temp = {10000, 0, 0, 0};
            dfs(id[i], temp);
            temp.avg_sets /= temp.M;
            temp.avg_area /= temp.M;
            ans.push_back(temp);
        }
    sort(ans.begin(), ans.end(), cmp);
    printf("%d\n", ans.size());
    for(int i = 0; i < ans.size(); ++i)
        printf("%04d %d %.3lf %.3lf\n", ans[i].id, ans[i].M, ans[i].avg_sets, ans[i].avg_area);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值