L2-007 familyプロパティ(25ポイント)互いに素セット

トピックリンク

 

ソリューション:互いに素セット家と一緒に特別なポイントを置くには、大規模で行くには小さな数です。この問題は、エラーのないデータとなりますピット番号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]は.nu​​m >> 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] .nu​​m + = P [i]は.nu​​m。
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]は.nu​​m = Q [i]は.nu​​m / 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 ] .nu​​m、Q [i]の.area)。
95      }
 96      リターン 0 97 }

 

おすすめ

転載: www.cnblogs.com/lilibuxiangtle/p/12293649.html