1 #include <cstdio>
2 #include <set>
3 #include <vector>
4 #include <algorithm>
5 using namespace std;
6 const int N=1e4+5;
7 const int inf=1e8;
8 int n;
9 int f[N];
10 set<int>st,tt;
11 set<int>::iterator it;
12 struct node{
13 int ns=0,S=0;
14 }peo[N];
15 struct edge{
16 int Min=inf,num=0;
17 double avgHouse=0,avgS=0;
18 bool operator < (const edge x)const &{
19 if(x.avgS==avgS){
20 return x.Min>Min;
21 }
22 return x.avgS<avgS;
23 }
24 }res[N];
25 vector<edge>sus;
26 void init(){
27 for (int i=0; i<N; i++) {
28 f[i]=i;
29 }
30 }
31 int query(int x){
32 int r=x;
33 while (f[x]!=x) {
34 x=f[x];
35 }
36 f[r]=x;
37 return x;
38 }
39 void join(int x,int y){
40 int fx=query(x);
41 int fy=query(y);
42 if(fx!=fy){
43 f[fx]=fy;
44 }
45 }
46 void checkjoin(int x,int d,int m){
47 st.insert(x);
48 if(d!=-1 && m!=-1){
49 st.insert(d);
50 st.insert(m);
51 join(d, m);
52 join(x, d);
53 }else if(d!=-1){
54 st.insert(d);
55 join(x, d);
56 }else if(m!=-1){
57 st.insert(m);
58 join(x, m);
59 }
60 }
61 int main(){
62 int x,d,m,k,c;
63 init();
64 scanf("%d",&n);
65 for (int i=0; i<n; i++) {
66 scanf("%d%d%d",&x,&d,&m);
67 checkjoin(x, d, m);
68 scanf("%d",&k);
69 for (int j=0; j<k; j++) {
70 scanf("%d",&c);
71 st.insert(c);
72 join(c, x);
73 }
74 scanf("%d%d",&peo[x].ns,&peo[x].S);
75 }
76 for (it=st.begin(); it!=st.end(); it++) {
77 x=*it;
78 int fx=query(x);
79 if (x==fx) tt.insert(x);
80 res[fx].Min=min(res[fx].Min, x);
81 res[fx].num++;
82 res[fx].avgHouse+=peo[x].ns;
83 res[fx].avgS+=peo[x].S;
84 }
85 for (it=tt.begin(); it!=tt.end(); it++) {
86 x=*it;
87 res[x].avgHouse/=res[x].num;
88 res[x].avgS/=res[x].num;
89 sus.push_back(res[x]);
90 }
91 sort(sus.begin(), sus.end());
92 printf("%d\n",(int)sus.size());
93 for (int i=0; i<sus.size(); i++) {
94 printf("%04d %d %.3lf %.3lf\n",sus[i].Min,sus[i].num,sus[i].avgHouse,sus[i].avgS);
95 }
96 return 0;
97 }