互いに素なセットウェル離れ合併は、最初のターンマージに降順を読み取るオフと考えることができません
ヒント: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 = 0。INT W = 0。CHAR 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 ; }