2152 聰聰可可

2021-07-09 01:56:06 字數 447 閱讀 3953

記憶體誠可貴,效率價更高,若為碼長故,二者皆可拋。

本著珍愛生命,遠離邊分的原則,我果斷選擇了點分。

聽說此題樹形dp可過?算了懶得管。

#include#include#includeusing namespace std;

const int n=20000+5;

const int inf=1e9;

struct edgee[n<<1];

int head[n],cnt;

void ins(int u,int v,int w)

int siz[n],root,dist[n],tot,lim,sz;

int rest[3],ans;

bool vis[n];

void findroot(int u,int fa)

tmp=max(tmp,sz-siz[u]);

if(tmp

樹分治 BZOJ 2152 聰聰可可

考慮經過根的路徑,不經過根的路徑由分治得出。記子樹中的所有點到根的路徑長度對3取模以後為0的個數為a,為1的個數為b,為2的個數為c。組合數學容易算出路徑條數為a a b c 2。然後計算概率即可。include include include include include include inc...

bzoj2152 聰聰可可 點分治

點分治求路徑長度為3的倍數的鏈的條數,結果用分數表示。這道題明顯是樹形dp簡單,然而還是寫了點分治 練習所用沒辦法啊 ac 如下 include include include define n 50005 using namespace std int n,m,tot,sum,rt,ans,t 3...

BZOJ2152 聰聰可可 點分治

此題明顯可以點分治解決,對每層分治塊遞迴子塊,求出塊內有多少距離 3 0,1,2的節點,與之前其他塊的資訊歸併,即ans f 0 g 0 f 1 g 2 f 2 g 1 再把g加到f上面去即可 注意點分治求重心一定注意不要打錯字母 打混x,y之類的 注意此題題意詭異,點對要 2 n 單點也算,反過來...