https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805068539215872?type=7&page=1
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
typedef long long ll;
#define int long long
const int N=100000;
int p[N],vis[N];
int siz[N],tao[N];
double area[N];
int n;
struct node{
int id;
int ge;
double ta;
double mi;
int siz,tao;
double area;
bool operator<(const node &qwe)const{
if(mi==qwe.mi) return id<qwe.id;
return mi>qwe.mi;
}
}a[N],s[N];
int cnt=0;
int find(int x){
if(x!=p[x]) p[x]=find(p[x]);
return p[x];
}
void marge(int x,int y){
x=find(x),y=find(y);
if(x>y) swap(x,y);
p[y]=x;
}
void solve()
{ cin>>n;
for(int i=0;i<N;i++) {p[i]=i;siz[i]=1;vis[i]=0;}
while(n--){
int a,b,c,k;
cin>>a>>b>>c>>k;
if(b!=-1){ marge(a,b);vis[b]=1;}
if(c!=-1) {marge(a,c);vis[c]=1;}
vis[a]=1;
while(k--){
int ti;
cin>>ti;
marge(a,ti);
vis[ti]=1;
}
cin>>tao[a]>>area[a];
}
for(int i=0;i<=N;i++){
if(vis[i]==0) continue;
int x=find(i);
s[x].siz+=siz[i];
s[x].tao+=tao[i];
s[x].area+=area[i];
}
for(int i=0;i<=N;i++){
if(vis[i]==0) continue;
int x=find(i);
if(x!=i) continue;
a[++cnt]={i,s[i].siz,s[i].tao*1.000/s[i].siz,s[i].area*1.0000/s[i].siz};
}
cout<<cnt<<endl;
sort(a+1,a+1+cnt);
for(int i=1;i<=cnt;i++){
auto k=a[i];
int id=a[i].id;
int ge=a[i].ge;
double ta=a[i].ta;
double mi=a[i].mi;
string ts=to_string(id);
for(int i=ts.size()+1;i<=4;i++) cout<<0;
cout<<id<<" "<<ge<<" ";
cout<<fixed<<setprecision(3)<<ta<<" "<<setprecision(3)<<mi;
if(i!=cnt) cout<<endl;
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
solve();
return 0;
}