10 20T3 DLZ常數剪枝 列舉邊 帶權重心

2022-05-01 18:33:07 字數 1215 閱讀 9267

dlz常數史稱杜林哲常數,用來優化樹中最值以及列舉邊的問題

dlz常數的計算方法是看樹的規模,再進行一系列的運算可以得到

在這道題裡面dlz常數可以控制在11~20之間,就可以剪枝了

做法:列舉每一條邊,找兩邊子樹的帶權重心,此時必定最優,然後計算出相應的值然後進行比較

dlz剪枝定律:當兩邊子樹的比值為乙個dlz常數範圍的時候,剪枝必定成立並且可以優化時間複雜度

這個定律在bashu聯考的時候被dlz提出

複雜度o(n^2/dlz)

code:

1 #include2 #include3

#define n 100005

4using

namespace

std;

5struct

nodee[n];

8int

first[n],nxt[n],cnt;

9void add(int u,int

v)15

intsiz[n],root,a[n],mxsiz,mark;

16int getroot(int x,int

father)

26 max0=max(max0,mxsiz-siz[x]);

27if(max0

32int

temp,dis[n],end;

33void getdis(int x,int

father)42}

43int s[n],suma,ans=0x3f3f3f3f;44

void cal(int x,int

y)58

void work(int x,int

father)68}

69int

main()

78for(int i=1;i<=n;i++)

82 work(1,0

);83 cout<

84return0;

85 }

over

T139631 T3 階乘之和

給定乙個非負整數 n,請你判斷 n 是否可以由一些非負整數的階乘相加得到。有若干組資料。每行乙個整數 n,保證 n 1000000。以負數結束輸入。對於每組資料輸出一行,若可以則輸出 yes 否則輸出 no 輸入 1複製 9 1 輸出 1複製 yes7 20 校內測模擬t3 差點就離 l 開 k i...

考試程式 DAY3 T3

題目大意 給出求每個區間的異或和的花費cost i j 求知道每乙個元素的最小花費 分析 考試的時候想成了線性基 明明考圖論了 結果就gg了.正解是mst,把每個詢問當做邊,字首和 似乎可以這麼說 當做點,做mst include include include include include in...

T3進銷存公升級T 備忘

t3進銷存資料公升級t 只能公升級各種基礎檔案和截至某月底的結存數量 不含單價 金額 一 安裝及加密識別 1.1 因為不能公升級歷史業務單據,所以如果要查詢t3的歷史資料,需要在訂購t 時同時訂購t3查詢工具。1.2 t3和t 需要安裝在一台電腦,t3主要查詢,不再做新資料,所以想用高版本sql,也...