DP優しい木

ツリーは、モジュロ3 == 0の点(x、y)の順序対の間の経路の長さは、この長さはANS0ます追加した場合。

  モジュロ== 1〜3と、このANS1長が追加されます。

  ==モジュロ2〜3ならば、それはこのANS2長が追加されます。

あなたBEG ANS0、ANS1、ANS2ください。

 

入力フォーマット:

最初の行は、整数nを含んでいるが、Nであり、それが表すポイント

N-1行以下、それぞれの行は、Bの経路長V、入力ループを有しているから入力三つの整数、B、V、代表であり、複数のエッジが存在することを確認します

 

出力フォーマット:

出力三の整数を含むが、応答モード3つの路長1E9 + 7に格納されています。

 

例:

5

0 1 2

0 2 3

0 3 7

0 4 6

 

54 60 30

 

明らかに、これは限り、この点は同じ点からサブツリーのモジュラスに記録されているように、ツリーDPです。

場合境界状態遷移ことに留意されたいです。

 

#include <ビット/ STDC ++ H> 
の#pragma GCCの最適化(2)
の#pragma GCCの最適化(3)
の#define P十億七
の#define INC(I、B)iは= INT(登録のため、私は= Bを<。 I ++)
私は= int型の#define 12月(私は、A、B)のために(登録; I> = B; i--)
名前空間stdを使用します。
テンプレート<クラスnTの> 
インラインボイド読み取る(NT&X)
{ 
	チャーC。一方、(C = GETCHAR(),! isdigit(c)参照)。
	X = C ^ 48。(C = GETCHAR()、isdigit(c)参照)、一方、X = X * 10 + C-48。
} 
int型のヘッド[2000010]、CNT。
クラスlittlestar { 
	パブリック:
		int型へ。
		int型のNXT。
		int型のw; 
		ボイド追加(INT U、int型V、int型GG){ 
			= Vまで; 
			NXT =頭部[U]。
			W = GG。
			ヘッド[U] = CNT。
		}
}星[2000010]。
int型G [1000010] [4]。
ボイドDFS(INT U、INT FA)
{ 
	G [U] [0] = 1。
	{(; iはi =星[I] .nxt [U] I =ヘッドINT)のため
		のint V =スター[I] .TO。
		(== FA V)続けるならば、
		DFS(V、U); 
		INC(j、0,2)G [U] [(J + 1スター[I] .W%3)%3] + = G [V] [J]。
	} 
} 
長い長いANS [5]、[1000010] F [4]。
長い長いTMP [5]、[5] TOT。
ボイドDP(INT U、INT FA)
{ 
	(INT I =ヘッド[U]; I; I =星[I] .nxt)用{ 
		int型V =スター[I] .TO。
		(== FA V)続けるならば、
		DP(V、U); 
		TMP [0] = tmpに[1] = TMP [2] = 0。
		TOT [0] [2] = 0 TOT [1] = TOTを=。
		INC(j、0,2){ 
			TMP [(J +星[I] .W)%3] =(TMP [(J +星[I] .W)%3] + F [v] [J]) %のP。
			TMP [(J + 1スター[I] .W)%3] =(TMP [(J +星[I] .W)%3] + G [V] [J] *星[I] .W%のP) %のP。
			TOTの[(J + 1スター[i]は.W)%3] =(TOTの[(J +スター[i]は.W)%3] + G [V] [j])%のP。
		} 
		INC(j、0,2){ 
			INC(k、0,2){ 
				ANS [(J + K)%3] =(ANS [(J + K)%3] + TMP [J] *(G [ U] [K] [K]を-tot))%のP。
			} 
		} 
		INC(j、0,2){ 
			F [U] [J] =(F [U] [J] + TMP [J])%のP。
		} 
	} 
} 
int型のmain()
{ 
	int型のn; (n)を読み出します。
	INC(I、1、N-1){ 
		UをINT、V、W。(U)を読みます。(v)を読みます。(W)を読み取ります。
		++ U; ++ V; 
		星[++ CNT] .add(U、V、W)。
		星[++ CNT] .add(V、U、W)。
	} 
	DFS(1,0)。
	DP(1,0)。
	COUT << ANS [0] * 2%P << " "<< ANS [1] * 2%P <<"" << ANS [2] * 2%P。

 

おすすめ

転載: www.cnblogs.com/kamimxr/p/11722474.html