zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) 1114. Family Property (25)

    简单DFS。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<map>
    #include<queue>
    #include<stack>
    #include<algorithm>
    using namespace std;
    
    struct X
    {
        int id;
        int Father,Mother;
        int k;
        int son[10];
        int M_estate;
        int Area;
    }s[10000+10];
    int n;
    int f[10000+10];
    struct Ans
    {
        int id;
        int M;
        int sum_set;
        int sum_area;
    }ans[10000+10];
    int sz;
    int indx[10000+10];
    
    vector<int>g[10000+10];
    int min_id;
    int sum;
    int sum_set;
    int sum_area;
    
    bool cmp(const Ans&a,const Ans&b)
    {
        if(1.0*a.sum_area/a.M==1.0*b.sum_area/b.M) return a.id<b.id;
        return 1.0*a.sum_area/a.M>1.0*b.sum_area/b.M;
    }
    
    void dfs(int x)
    {
        ans[sz].id=min_id;
        ans[sz].M=sum;
        ans[sz].sum_area=sum_area;
        ans[sz].sum_set=sum_set;
    
        for(int i=0;i<g[x].size();i++)
        {
            if(f[g[x][i]]==1) continue;
            f[g[x][i]]=1;
    
            min_id=min(min_id,g[x][i]);
            sum=sum+1;
            sum_set=sum_set+s[g[x][i]].M_estate;
            sum_area=sum_area+s[g[x][i]].Area;
    
            dfs(g[x][i]);
        }
    }
    
    int main()
    {
        for(int i=0;i<=10000;i++)
        {
            s[i].Father=-1;
            s[i].Mother=-1;
            s[i].k=0;
            s[i].Area=0;
            s[i].M_estate=0;
        }
    
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
            int ID; scanf("%d",&ID); indx[i]=ID;
            s[ID].id=ID;
            scanf("%d%d",&s[ID].Father,&s[ID].Mother);
            scanf("%d",&s[ID].k);
            for(int j=0;j<s[ID].k;j++) scanf("%d",&s[ID].son[j]);
            scanf("%d",&s[ID].M_estate);
            scanf("%d",&s[ID].Area);
    
            if(s[ID].Father!=-1){
                g[s[ID].id].push_back(s[ID].Father);
                g[s[ID].Father].push_back(s[ID].id);
            }
            if(s[ID].Mother!=-1){
                g[s[ID].id].push_back(s[ID].Mother);
                g[s[ID].Mother].push_back(s[ID].id);
            }
            for(int j=0;j<s[ID].k;j++)
            {
                g[s[ID].id].push_back(s[ID].son[j]);
                g[s[ID].son[j]].push_back(s[ID].id);
            }
        }
    
        memset(f,0,sizeof f); sz=0;
        for(int i=1;i<=n;i++)
        {
            if(f[s[indx[i]].id]==1) continue;
            min_id=s[indx[i]].id;
            sum=1;
            sum_set=s[indx[i]].M_estate;
            sum_area=s[indx[i]].Area;
            f[s[indx[i]].id]=1;
            dfs(s[indx[i]].id);
            sz++;
        }
    
        sort(ans,ans+sz,cmp);
        printf("%d
    ",sz);
        for(int i=0;i<sz;i++)
        {
            printf("%04d %d %.3lf %.3lf
    ",ans[i].id,ans[i].M,1.0*ans[i].sum_set/ans[i].M,1.0*ans[i].sum_area/ans[i].M);
        }
    
        return 0;
    }
  • 相关阅读:
    asp.net在线压缩和解压缩的实现 VS2005
    Office组件配置
    您无权查看或编辑目前 F:\XXX 的权限设置;但是,您可以取得所有权或更改审核设置
    23条心灵寄语献给在创业一线的兄弟姐妹
    IIS 环境下 w3wp.exe 进程 CPU 占用过高的解决方案
    SQLServer修改表所有者
    走出软件作坊推荐
    Asp.net 的 服务器推技术 (Server Push)
    上海火车站售票点
    Newtonsoft.Json.dll 本地调用正常,服务器调用不正常
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5645230.html
Copyright © 2011-2022 走看看