1114 Family Property (25 分)难度: 中/ 知识点: 并查集

Posted 辉小歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1114 Family Property (25 分)难度: 中/ 知识点: 并查集相关的知识,希望对你有一定的参考价值。


https://pintia.cn/problem-sets/994805342720868352/problems/994805356599820288
挺好的一个并查集,先读入然后再处理。注意:在并查集合并的时候选编号小的作为根。

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int p[N],people[N],home_cnt[N],st[N],n;
double area[N];
struct nodeint a,b;temp;
struct family

    int id,cnt;
    double avg,area;
;
vector<node>ve;
vector<family>ans;
bool cmp(family a,family b)

    if(a.area==b.area)
        return a.id<b.id;
    return a.area>b.area;

int find(int x)

    if(x!=p[x]) p[x]=find(p[x]);
    return p[x];

int main(void)

    cin>>n;
    for(int i=0;i<N;i++) p[i]=i,people[i]=1;
    for(int i=0;i<n;i++)
    
        int id,month,father,k; cin>>id>>month>>father>>k;
        st[id]=1;
        if(month!=-1) ve.push_back(id,month),st[month]=1;
        if(father!=-1) ve.push_back(id,father),st[father]=1;
        for(int j=0;j<k;j++)
        
            int x; cin>>x; st[x]=1;
            ve.push_back(id,x);
        
        cin>>home_cnt[id]>>area[id];
    
    for(int i=0;i<ve.size();i++)
    
        int a=ve[i].a,b=ve[i].b;
        int fa=find(a),fb=find(b);
        if(fa!=fb)
        
            if(fa>fb) swap(fa,fb);//选小结点作为根
            people[fa]+=people[fb];
            home_cnt[fa]+=home_cnt[fb];
            area[fa]+=area[fb];
            p[fb]=fa;
        
    
    for(int i=0;i<N;i++)
        if(st[i]&&p[i]==i)//如果该点存在,且是该集合的根
        
            ans.push_back(i,people[i],home_cnt[i]*1.0/people[i],area[i]/people[i]);
        
    sort(ans.begin(),ans.end(),cmp);
    cout<<ans.size()<<endl;
    for(int i=0;i<ans.size();i++)
    printf("%04d %d %.3lf %.3lf\\n",ans[i].id,ans[i].cnt,ans[i].avg,ans[i].area);
    return 0;

以上是关于1114 Family Property (25 分)难度: 中/ 知识点: 并查集的主要内容,如果未能解决你的问题,请参考以下文章

1114 Family Property (25 分)难度: 中/ 知识点: 并查集

A1114 Family Property (25分)

A1114 Family Property (25分)

PAT_A1114#Family Property

PAT甲题题解-1114. Family Property (25)-(并查集模板题)

PAT 1114 Family Property[并查集][难]