T1:
先考慮樹的情況。
DFS遍歷整棵樹,將每個兒子向自己連的鏈兩兩匹配。
若有落單的點,就把當前節點的父鏈連進去,反之將父鏈傳上去。
對於圖的情況,我們可以將一個點拆成許多點,保持邊不變,再對新建的樹進行上述過程。
時間復雜度$O(m)$。
T2:
考慮轉化題意。
設原序列為$a$,對原序列開一個互逆數組$b$,$a$的字典序最小等價於$b$的字典序最小,考慮對$b$進行操作。
這樣題意轉化為鄰項交換,交換的條件是兩個數的差不小於$k$。
易發現若兩個數的差小於$k$,則這兩個數永遠不會被交換,也就意味着兩個數的相對位置固定。
對於這樣的點對,從左向右連邊,跑優先隊列拓撲。
但是邊的級別是$n^2$的,就把每個點向它右邊第一個大於它和第一個小於它並且差小於$k$的連邊。
證明:
假設有兩個不能交換的數$x$和$y$,$y$在$x$右側,又有另一個數$z$,位於$y$右側,並且$x$與$z$也不能交換,忽略其他數。
若$(y>x \ and \ z>x) or (y<x \ and \ z<x)$,$y$與$z$的差一定小於$k$。
若$(y>x \ and \ z<x) or (y<x \ and \ z>x)$,$x$與$z$直接有連邊。
故上述方法正確。
時間復雜度$O(nlogn)$。
T3:
結論:最大流之和為所有邊邊權相加。
證明:
若使最大流之和最大,那么邊權小的便起的限制作用應盡可能小。
由於每條邊將樹分為兩個部分,所以最小邊的限制作用至少起到過一次。
將最小邊割斷,對剩下的連通塊重復進行上述過程。
所以每個邊都被取到一次是最優的。
就是$A+B \ problem$。
時間復雜度$O(n)$。