互いに素なセット|| [USACO18JAN] MooTube || BZOJ 5188 || Luogu P4185

質問表面:[USACO18JAN] MooTube

ソリューション:

側では、すべてのソートし、各側は、現在の要件がでスローされ、ノードの現在のエピソードが可能かを判断するために、各照会や調査のための設定チェック満たすように頼みます。

あまりにも最初の方であるが、その後、ガチョウは、行する方法はなかったの前に私は、互いに素設定するランクの順序を追加することによって、退屈、またO2を開設し、プラス素早く読み取り、およびだけで170ms。

上記の動作は何もしません

コード:

1の#include <cstdioを>
 2の#include <アルゴリズム>
 3  使用して 名前空間STDを、
4インラインint型RD(){
 5      INT X = 0チャー C = GETCHAR()。
6      一方、(C < ' 0 ' || C> ' 9 ')C = GETCHAR()。
7      一方(> = C ' 0 ' && C <= ' 9 '){X = X * 10 + C- ' 0 'C = GETCHAR()。
8      リターンX。
9  }
 10  のconst  int型 MAXN = 1E5 + 5、MAXQ = 1E5 + 5 11  INT N、Q、A、B、C、FAは[MAXN]、DEP [MAXN]、F1、F2は、今、CNTは[MAXN]、[MAXQ] ANS。
12  構造体のエッジ{ INT  から、DIS、であり; }エッジ[MAXN]。
13  構造体 Query_ { int型K、X、ID。} [MAXQ] QRY。
14インラインブール CMP1(CONSTエッジと、CONSTエッジ&B){ リターン > a.dis b.dis。}
 15インラインブール CMP2(CONSTQuery_と、CONST Query_&B)は{ 返す AK> BK。}
 16インラインINT GETF(INT A){
 17      であれば(FA [A] == a)に戻ります18      FA [A] = GETF(FA [A])。
19      リターンFA [A]。
20  }
 21  INT メイン(){
 22      のscanf(" %d個の%のD "、&​​N、&Q)。
23      のためにint型 i = 1 ; iがNを<Iは++ ){
 24          、A = RD()。B = RD()。C = RD()。
25         エッジ[I]。から = ;
26          エッジ[I] .TO = B。
27          エッジ[i]は.DIS = C。
28      }
 29      のためのint型 I = 1 ; I <= Q; iは++ ){
 30          = RD()。B = RD()。
31          QRY [I]・K = A。QRY [I] .X = B。QRY [I] .ID = iは、
32      }
 33      ソート(エッジ+ 1、エッジ+ N、CMP1)。
34      ソート(QRY + 1、QRY + Q + 1 、CMP2)。
35      のためにINT I = 1; iは= N <、iは++)FA [I] = I、CNT [I] = 1 36      今= 0 37      のためには、int型 = Iを1 ; I <= Q; iは++ ){
 38          ながら(今+ 1 <= N- 1 &&エッジ[今+ 1 ] .DIS> = QRY [I]・K){
 39              今++ 40の              F1 = GETF(エッジ[今]。から);
41の              F2 = GETF(エッジ[今] .TO)。
42              であれば(F1!= F2){
 43                  であれば(DEP [F1] < DEP [F2]){
 44                     [F1] =ためのF2。
45                      CNT [F2] + = CNT [F1]。
46                  }
 47                  そう であれば(DEP [F1]> DEP [F2]){
 48の                      行う[F2] = F1。
49                      CNT [F1] + = CNT [F2]。
50                  }
 51                  {
 52の                      作る[F1 = F2。
53                      DEP [F2] ++ ;
54                      CNT [F2] + = CNT [F1]。
55                  }
 56              }
 57         }
 58の          ANS [QRY [I] .ID] = CNT [GETF(QRY [I] .X)] - 1 59      }
 60      のためのint型 iは= 1のprintf(; I <= Q iが++)" %Dを\ n " 、ANS [I])を
61      リターン 0 62 }
コードの表示

 


で:AlenaNuna

 

おすすめ

転載: www.cnblogs.com/AlenaNuna/p/11604583.html