[Luogu4185] [USACO18JAN] MooTube [互いに素なセット]

P4185 [USACO18JAN] MooTube 

互いに素なセットウェル離れ合併は、最初のターンマージに降順を読み取るオフと考えることができません

ヒント:JSOI2008 P1197をマージする後方オフ悪い考えです

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
#define MAX(X、Y)(X)<(Y)?(Y):( X)
 の#define MIN(X、Y)(X)<(Y)?(X):( Y)
 の#defineが長いっ長い
 の#define RGレジスタ
 のconst  int型 N = 300000 + 5、M = 1000000 + 5、INF = 0x3f3f3f3f、P = 9999973 INTのN、M、F [N]、SZ [N]。
テンプレート < クラス T> ボイド RD(T&X){ 
    X = 0INT W = 0CHAR CH = 0 しばらく W | = CH ==(isdigit(CH)!)' - '、CH = getchar関数();
    一方、(isdigit(CH))X =(X << 1)+(X << 3)+(CH ^ 48)、CH = GETCHAR()。
    X?= W - X:X; 
} 

int型の検索(INT X){ リターン F [X] == X X:[X] = F 検索([X] F);}
 ボイドマージ(int型のx、int型のY){
     int型の FX =見つける(X) 、FY = 見つける(Y)
    もし(FX ==年度)のリターン; 
    SZ [FX]+ = SZ [FY]、F [FY] = FX。
} 

構造体の縁{ int型、U、V、W、E} [N << 1 ]。
構造体ノード{ int型K、V、POS、ANS;}尋ねる[N]。
BOOL CMP1(辺A、辺B){ 戻り AW> BW;}
 ブール CMP2(ノードA、ノードB){ 戻り AK> BK;}
 ブール CMP3(ノードA、ノードB){ 戻り <a.posをb.pos ;} 

int型のmain(){
 //     freopenは( "in.txt"、 "R"、STDIN)。
    RD(n)は、RD(M)、F [N] = N、SZ [N] = 1 以下のためのint型 I = 1; iがN <; ++ I)RD(E [I] .U)、RD(E [I] .V)、RD(E [I] .W)、SZ、[I] = I F [i]が= 1 ;
    int型 I = 1 ; I <= M; ++ i)は、RD、RD = [I] .POSを尋ねる(.V [i]を尋ねる)(・K [i]を尋ねる)iは、
    ソート(E + 1、E + N、CMP1)。
    ソート(ASK + 1を、尋ねる+ M + 1 、CMP2)。
    INT I = 1、nxte = 1 ; I <= M; ++ I){
         一方(nxte <N && E [nxte] .W> = [I]・K尋ねる)
        マージ(E [nxte] .U、E 【nxte] .V)、 ++ nxte。
        尋ねる[i]は.ans = SZ [検索(ASK [I] .V)] - 1 
    } 
//     ( "%dの" SZ [i])とのprintfため(++のI; iは= N <I = 1 INT)。
    ソート(+尋ねる1を、尋ねる+ M + 1 、CMP3)。
    以下のためにint型 I = 1 ; I <= M; ++ i)がprintfの(" %Dを\ n " 、[I] .ansを尋ねます)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/lxyyyy/p/11220678.html
おすすめ