ソリューション:互いに素セット家と一緒に特別なポイントを置くには、大規模で行くには小さな数です。この問題は、エラーのないデータとなりますピット番号0000、3と5を持っている可能性があります。
1の#include <ビット/ STDC ++ H> 2 使用して 名前空間STDを、 3 4 構造体ノード 5 { 6 int型のID、NUM、領域、FA、MA。 7 INTの CH [ 10 ]。 8 } P [ 100100 ]。 9 10 構造体FZ 11 { 12 のint ID、すべて; 13 ダブルNUM、領域、 14 } Q [ 100100 ]。 15 16 のintパー[ 10100 ]。 17 int型の[10010 ]。 18 INT VIS [ 10010 ]。 19 20 ブールCMP(FZ X、Y FZ) 21 { 22 であれば(x.area == y.area)リターン x.id < y.id。 23 リターン x.area> y.area。 24 } 25 26 ボイドのinit()の 27 { 28 のために(INTは iは= 0 ; I < 10100 ; I ++ ) 29 パー[I] = I。 30 } 31 32 int型の検索(INT X) 33 { 34 であれば(X = PAR [X])パー[X] =!検索(パー[X])。 35 リターン・パー[X]。 36 } 37 38 空隙 unionn(int型、INT B)の 39 { 40 INT FA =()、FBを見つける= (B)を見つけます。 41 であれば(FA> FB)パー[FA] = FB。 42 他パー[FB] = FA。 43 } 44 45 のint main()の 46 { 47 のinit(); 48 int型のn; 49 cinを>> N; 50 のために(INT iが= 0 ; iが<N; I ++ ){ 51 のint kは、 52 CIN >> P [i]の.ID。 53の S [P [i]は.ID] = 1 。 54 CIN >> P [I]の.Fa >> P [i]の.ma >> K。 55 であれば(!P [I]の.Fa = - 1 ){ 56 unionn(P [i]の.ID、P [I]の.Fa)。 57の S [P [I]の.Fa] = 1 。 58 } 59 であれば(P [i]が.ma =! - 1 ){ 60 unionn(P [i]の.ID、P [i]の.ma)。 61の S [P [i]は.ma] = 1 。 62 } 63 のために(INT J = 0 ; J <K、J ++ ){ 64 CIN >> P [i]は.CH [J]。 65 もし(P [i]が.CH [J] =! - 1 ){ 66 unionn(P [i]の.ID、P [i]は.CH [J])。 67の S [P [i]は.CH [J] = 1 。 68 } 69 } 70 CIN >> P [i]は.num >> P [i]は.area。 71 } 72 のために(INT I = 0; I < 10010 ; I ++ ) 73 Q [i]は.ID = - 1 。 74 INT CNT = 0 。 75 のために(INT iが= 0 ; iが<N; I ++ ){ 76 、INT X = 見つける(P [I] .ID)は、 77 もし(VIS [X]!)CNT ++ ; 78 VIS [X] = 1 。 79 Q [X] .ID = X。 80 Q [X] .num + = P [i]は.num。 81 Q [X] .area + = P [i]は.area。 82 } 83 のために(INT iが= 0 ; I < 10010 ; I ++ ) 84の 場合(S [i])とQ [(I)検索]すべて++。; 85 のために(INT iが= 0 ; I < 10010は、I ++ ){ 86 であれば(Q [i]が.ID =! - 1 ){ 87 、Q [i]は.num = Q [i]は.num / 1.0 / Q [iが]。すべて; 88 であれば(Q [i]が.ALL)Q [i]は.area = Q [i]は.area / 1.0 / Q [i]は.ALL。 89 } 90 } 91 ソート(Q、Q + 10010 、CMP)。 92 printf(" %dの\ n " 、CNT)。 93 のための(INTは私= 0 ; I <CNT; I ++ ){ 94 のprintf(" %04D%D%.3f%.3f \ n " 、Q [i]は.ID、Q [i]を.ALL、Q [I ] .num、Q [i]の.area)。 95 } 96 リターン 0 。 97 }