羅区P4933マスターズ

フェイス質問

 

(:暴力的な人々を演奏トピックと弟共演APIO / CTSC / WCと私の隣の大学ワットこの質問Shuaio(OH)実名推奨!)

データ範囲は、本当に頭を悩まされたときに、慎重に見ていません。私はO(N ^ 2)バーストハンマーをDPに思いました。

その後、V <= 20000、この有能シェーンを見つけましたか?

暴力は、次のように私は2333年の暴力を介して実行する機会を取ることができ、少なくとも次のとおりです。

    我々は、同図に[I] = iのエッジに接続されたJ公差(I <jの)最初の[J] -aの各々の全て次いで、公差の各々を列挙し、この要求は、トポロジカルソート再びピットインプログラム公差のいくつかの種類。(いずれの選挙法のみDAGとから構築だけにマップすることができるので(DAGはなぜ一方の鎖上のそれのこれはない証拠が...)で、我々は直接リンクの総数をカウントすることができます)

 

    小さな見落としは数だけ算術シーケンスは、このような場合は、各ラウンドで再びカウントされなければならないだろう構成し、我々はそれに最後の時間をカウントする必要があるため、あります。一つの解決策は、その後、回答-nを丸める+ nの後もう一度数えることです。

 

暴力の数の複雑さ、O(2 * N ^ 2 *ログ(N)+ N * V)、トポロジカルソートO(N ^ 2)の背面側の総数が押し下げフロントのより複雑です、私は基数ソートや余分を書くのが面倒だけど、あるため、複雑である一方なぜなら、この質問2 * N ^ 2 *ログ(N)とN * V N及びVで同時に最大値を取得するときに正確に等しく、私はHHHHこのようなものを最適化するために、気にしないだろう

 

#include <ビット/ STDC ++ H> 
の#defineは長い長いllの
名前空間stdを使用します。
#define PBの一back 
のconst int型N = 1005、HA = 998244353。

インラインINTは、(int型のx、int型のY){X + = Yを追加します。?X> = HA X-HA返す:X;} 
インラインボイドADD(INT&X、int型のY){X + Y =。IF(X> = HA)のx = HA;} 

ベクトル<整数> G [N]。
INT F [N]、N、H [N]、NUM、ANS、ID [N]。
構造体ノード{ 
	int型のX、Y、Z。
	ブール演算子<(constのノード&U)のconst { 
		戻りZ <UZ。
	} 
} [N * 600 + 5]。

インラインボイドTSort(){ 
	キュー<整数> Q。
	(!ID [i])とする場合q.push(i)について(I ++はint型i = 1; iが<= N)。
	
	用(INT X;!q.empty(); q.pop()){ 
		X = q.front()、ADD(ANS F [X])。
		以下のために(INT I:G [X]){  
			ADD(F [I]、F [X])。
			(!( - ID [I]))であればq.push(I)。
		} 
	} 
} 


インラインボイドは、(解決){ 
	(I = 1をint型、iがN <; I ++の)のための
	    (int型J = I + 1、J <= N; J ++)するA [++ NUM] =(ノード){I 、J、H [J] -h [I]}。
	ソート(A + 1、+のNUM + 1)。
	
	{(; I <= NUM I = J、I = 1 jは整数)のために
		(F + 1、F + N + 1,1)を埋める、J = I、memsetの(ID、0、はsizeof(ID))。
		以下のために[I] .clear()Gを(INT i = 1; iは++; iが= N <)。
		
		一方、(J <= NUM && [J] .Z == A [i]の.Z)G [[J] .X] .pb([J]・Y)、ID [j]の.Y] + +、J ++; 
		
		TSort()、(ANS、HA-N)を追加します。
	} 
	
	(nは、ANS)を追加します。
} 

int型のmain(){ 
	scanf関数( "%のD"、&N); 
	以下のために(INT i = 1; iが<= N; iは++)のscanf( "%dの"、H + i)を、
	()のprintf( "%d個の\ n"、ANS)を解きます。
	0を返します。
}

  

 

おすすめ

転載: www.cnblogs.com/JYYHH/p/11299439.html