各辺e:={u,v}∈Eについて、eを最初に描く場合の数を求めて足し合わせるという方針で解きたい。uのほうにある部分木とvのほうにある部分木を描く場合の数がわかれば、eを最初に描く場合の数もわかりそう。この方針で定式化してみる:
(uを親と見たときの)vを根とする部分木に辺{u,v}を追加した木をTu,vとする。Tu,vの辺の数を∣Tu,v∣とし、{u,v}から描き始める場合のTu,vの描き方の総数をf(u,v)とする。
f(u,v)の漸化式を与える。頂点vの子をw1,w2,...,wkとするとき、
f(u,v)=∣Tv,w1∣!...∣Tv,wk∣!(∣Tv,w1∣+...+∣Tv,wk∣)!f(u,w1)...f(u,wk)
となる。左から掛けているのは多項係数である。(vを根とする部分木を描くのに合計∣Tv,w1∣+...+∣Tv,wk∣本の辺を描く必要があり、描いている途中のどの時点でも常にw1,w2,...,wkを根とする部分木のどれを伸ばすか任意に選べるため。) vが子を持たない場合はf(u,v)=1である。
fがわかれば辺{a,b}∈Eを最初に書いた時の残りのn−2本の辺の描き方の総数が求まり、それらを足し合わせれば答えになる:
(a,b)∈E∑(∣Ta,b∣−1)!(∣Tb,a∣−1)!(n−2)!f(a,b)f(b,a)
これも上と考え方は同じである。
計算方法について。∣Tu,v∣はvを根とする部分木の頂点の数に等しいので、DFSしながらメモすればよい。f(u,v)もまったく同じで、DFSしながらメモするだけである。
計算量について。メモ化すれば1回ずつDFSするだけになるので、O(n)に見える……のだが、なんとなく信じられなくて2×105の木を作って実験してしまった。これがO(n)で求まるのか。 スターの時にO(n2)回見ることになるので、線形ではなかった。線形にするには全方位木DPをする必要がある。