//空间未优化
include[HTML_REMOVED]
using namespace std;
struct P
{
int fa,ma,k,a[10];
double num,s;
}p[10000];
struct F
{
int id;
double num,avg1,avg2;
}ans[10000];
int pre[10000];
void init()
{
for(int i=0;i<10000;++i)pre[i]=i;
}
int find(int x)
{
if(pre[x]==x)return x;
return pre[x]=find(pre[x]);
}
void merge(int x,int y)
{
x=find(x),y=find(y);
if(x>y)pre[x]=y;
else pre[y]=x;
}
bool vis[10000];
int main()
{
init();
int n; cin>>n;
while(n–)
{
int id,fa,ma,k;
cin>>id>>fa>>ma>>k;
vis[id]=1;
p[id].fa=fa,p[id].ma=ma,p[id].k=k;
if(fa!=-1)vis[fa]=1,merge(p[id].fa,id);//及时录入
if(ma!=-1)vis[ma]=1,merge(p[id].ma,id);
for(int i=0;i[HTML_REMOVED]>p[id].a[i];
vis[p[id].a[i]]=1;//忘了
merge(p[id].a[i],id);
}
cin>>p[id].num>>p[id].s;
//p[id]={fa,ma,k,a,num,s};//语法错误
}//输入P[]
for(int i=0;i<10000;i)
{
if(!vis[i])continue;
int an=find(i);
if(i!=an)vis[i]=0;
ans[an].id=an;
ans[an].num+=1;////一个人找对应家庭
ans[an].avg1+=p[i].num;
ans[an].avg2+=p[i].s;
}//处理出家庭
vector[HTML_REMOVED]v;
for(int i=0;i<10000;i)
{
if(!vis[i])continue;
ans[i].avg1=ans[i].avg1/ans[i].num;
ans[i].avg2=ans[i].avg2/ans[i].num;
v.push_back(ans[i]);
}
sort(v.begin(),v.end(),
{
if(f1.avg2==f2.avg2)
{
return f1.id[HTML_REMOVED]f2.avg2;
});
printf(“%d\n”,(int)v.size());
for(auto c:v)
{
printf(“%04d %d %.3f %.3f\n”,c.id,(int)c.num,c.avg1,c.avg2);
}
return 0;
}
//并查集,merge函数设计
//结构体排序
//很难容易思路混乱