hdu4786簡要題解

2021-08-02 22:56:08 字數 826 閱讀 8270

簡要題意:給出乙個邊權為1或0的無向圖,求一顆生成樹,使得邊權和為斐波那契數。

這裡有乙個重要的結論:一張邊權為1或0的無向圖,如果權值p在最大生成樹權值與最小生成樹權值之間,那麼一定可以構造出一棵權值為p的生成樹。

這樣就好辦了。先求出最大生成樹與最小生成樹的權值,然後判斷這兩者之間是否有乙個斐波那契數就可以了。

詳見**。

#include#include#include#include#include#include#includeusing namespace std;

const int n = 100001;

struct node

}edge[n];

int fa[n];

long long fib[100];

int find(int x)

int main()

}if(cnt < n - 1)

//構造最大生成樹

cnt = 0;

for(int i = 1; i <= n; i++) fa[i] = i;

for(int i = m; i >= 1; i--)

}if(cnt < n - 1)

//兩者之間是否有乙個斐波那契

for(int i = 1; ; i++)

if(fib[i] >= mn && fib[i] <= mx) else if(fib[i] > mx)

// printf("%d %d\n", mx, mn);

} return 0;

}

最小生成樹 Hdu4786

hdu4786 最小生成樹的變形題,求一遍最小,求一遍最大,在從此區間是否含有斐波那契數,別忘了並查集,因為可能不連通。後來想其實不難,場上出不來的原還是對最小生成數不熟練,基礎薄弱。includeusing namespace std int par 100100 int rank 101000 ...

HDU 4786 斐波那契生成樹

這道題的意思是給你一些邊,某些邊被染成黑色,還有一些邊被染成白色,現在問你沒有乙個生成樹他的白邊的數量是斐波那契數列中的數,我們可以先選黑邊得到最最小的白邊數,先選白邊得到最大的白邊數,然後看看這個區間有沒有斐波那契數即可,注意沒有生成樹時的情況。如下 include include include...

題解 CF1485 簡要題解

奇怪的難度。當 b 2 的時候再操作,操作次數是一定的。因此 b 的變化量很小,暴力列舉。考慮哪個數不同,然後不同後可以選擇的區間是什麼。會發現中間夾著的區間選兩遍,旁邊的選一遍。做字首和好了。簡單轉化發現一定要滿足 a k b 1 k。列舉 b 貢獻式帶有乙個 min 找到其分割點,前一部分直接求...