BZOJ 4712:洪水を完了することが掘り

コード:

#include <ビット/ STDC ++。H> 
に#define setIO(S)freopenは(S ".IN"、 "R"は、STDIN)
の#define 200001 MAXN 
の#define INF 1000000000 
の#define LSON(今<< 1)
の#define rsonを( (現在<< 1)| 1)
名前空間stdを使用。
頼むchar型[10]。
INT HD [MAXN]、[MAXN << 1]、NEX [MAXN << 1]、V [MAXN]、DP [MAXN]であり;  
[MAXN]、[MAXN] LN、FA [MAXN]、ボット[MAXN]、[MAXN] DFNトップINT SIZ [MAXN]、HSON [MAXN]。  
エッジをint型、nは、Q、ティム。  
ボイド追加(INT U、V INT)
{ 
	NEX [++エッジ] = HD [U]、HD [U] =縁、[エッジ]へ= V。
} 
ボイドDFS1(INT U、INT FF)
{ 
	SIZ [U] = 1、FA [U] = FFを、
	以下のために(INT I = HD [U]; I; I = NEX [I])
	{ 
	    int型V =乃至[I]。
	    (vは== FF)続けるならば、
	    DFS1(V、U); 
	    SIZ [U] + = SIZ [V]。
	    IF(SIZ [V]> SIZ [HSON [U])HSON [U] = V。 	
	} 
} 
ボイドDFS2(INT U、int型のTP)
{ 
	[++ティム] = U、DFN [U]は=ティム、トップ[U]は= TP LN。
	(HSON [U])場合
		DFS2(HSON [U]、TP)、ボット[U]はボット= [HSON [U]は]。
	他の
		ボット[U] = U; 
	以下のために(INT I = HD [U]; I; I = NEX [I])
	{ 
		int型V =乃至[I]。
		(V == FA [U] || V == HSON [U])続行。
		DFS2(V、V); 
	} 
} 
ボイドDFS(INT U)
{ 
	int型の和= 0。
	以下のために(INT I = HD [U]; I; I = NEX [I])
	{ 
		int型V =乃至[I]。
		(V == FA [U] || V == HSON [U])続行。
		DFS(V); 
		和+ = DP [V]。
	}
	DP [U] =分(V [U]、合計)。 
	INT半ば=(L + R)>> 1。
}

int型sumv [MAXN]、[MAXN] LMIN、ヴァル[MAXN]。
ボイド押し上げ(今INT)
{ 
	[rson]をsumv + = sumv [LSON] [今] sumv。
	LMIN [今] =分(LMIN [LSON]、sumv [LSON] + lmin0 [rson])。
} 
ボイドビルド(int型L、INT rは、今INT)
{ 
	IF(L> R)のリターン; 
	(L == R)なら
	、{ 
		int型、U = LN [L]、和= 0。
		以下のために(INT I = HD [U]; I; I = NEX [I])
		{ 
			int型V =乃至[I]。
			(V == FA [U] || V == HSON [U])続行。
			和+ = DP [V]。           
		} 
		IF(和== 0)
			のval [U] = V [U]。
			のval [U] =分(V [U]、合計)。
		腕立て伏せ(今)。
		返します。
	} 
	(L、中間、LSON)を構築します。
	(ミッド+ 1、R、rson)を構築。
	腕立て伏せ(今)。
} 
int型の照会(int型L、int型のR、今INT、INTのL、R INT)
{ 
	IF(L> = L && R <= R)
} 

int型のmain()
{ 
	setIO( "入力")。
	scanf関数( "%のD"、&N); 
	( "%d個"、&V [i])とscanfのため(++ I; iは= N <I = 1 INT)。
	(++ iは; iがN <I = 1、U、V INT)のために
	{ 
		追加(U、v)を、(uとV)を追加し、scanf関数( "%d個の%のD"、&U、およびV)。
	} 

	DFS1(1,0)、DFS2(1,1)、DFS(1)、DP [0] = INF構築(1、nは、1)。  

	scanf関数( "%d個"、&Q)。
	(Q--)しながら
	{ 
		scanf関数( "%sの"、頼みます)。
		IF(尋ねる[0] == 'C')
		{ 

		} 
		IF(尋ねる[0] == 'Q')
		{ 

		} 
	} 
	戻り0。

  

おすすめ

転載: www.cnblogs.com/guangheli/p/10971807.html