2020杭電第九場補題部落格

2021-10-24 01:15:36 字數 2768 閱讀 3300

tree

題目大意:現在存在一顆n個節點的樹,每個節點可以到達他的任何乙個孩子節點,如果x節點可以到達y節點,就記作乙個二元組(x,y),任何x節點可以到達本身這個節點,現在你可以新增一條有向邊,讓整棵樹的二元組數量最多,求出這個數量。

解題思路:我們知道,對於根節點來說,他能到達的節點數就是整棵樹的節點數n,也就是說每個節點在不新增在這條有向邊之前,所能抵達的節點數就是,該節點所代表的子樹的節點數。現在我們新增一條邊,那麼這條邊的兩個端點以及這兩個端點之間的所有的點,所能到達的節點數就是這個環中所有點所能到達的節點數的最大值。(這句話可能有點繞,但是應該不難理解吧),那麼我們知道根節點所能到達的點的數量是最多的,所有我們知道這條邊其中乙個端點就是跟節點,那麼如何使得這個環中的節點數量最多呢,當然就是葉子節點作為另乙個端點。現在我們只需要先求出沒有新增這條有向邊時,每乙個葉子節點到根節點的這條路徑上所有節點所能到達的節點數量之和,然後求出新增這條有向邊後的所對應的每個環中所有節點所能到達的節點數量之和。計算哪條路徑的數量增量最大,那麼我們就可以在這個葉子節點和根節點之間新增一條有向邊。(具體細節看**)

**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using namespace std;

const ll mod =

998244353

;const

int n=

5e5+5;

struct edge

; vector v[n]

;ll cnt[n]

;ll sum;

ll ans;

ll n;

void

dfs(

int x)

//求出x節點所能到達的節點數 並儲存在 cnt陣列中

for(

int i=

0;i.size()

;i++)}

void

dfs2

(int x,ll dep)

for(

int i=

0;i.size()

;i++)}

intmain()

for(

int i=

2;i<=n;i++))

;}dfs(1)

;//求出每個節點所能抵達的個數

for(

int i=

1;i<=n;i++

)dfs2(1

,1);

cout<

}}

slime and stones

題目大意:兩個人在玩遊戲,有兩堆石頭,一堆有a個石頭,一堆有b個石頭,遊戲規則是:每次可以從一堆石頭中取任意個石頭,或者從兩堆石頭中取石頭,這種情況下,設在左邊那堆石頭取x個,在右邊那堆石頭取y個,必須滿足|x-y|<=k這樣的條件。輪到誰無法取石頭,那麼這個人就輸了。

解題思路:首先這個題和威佐夫博弈十分的相似,在威佐夫博弈中,從兩堆石頭中取石頭的數量必須是相等的,也就是k=0的情況。首先我們假設abn=

an+n

b_n=a_n+n

bn​=an

​+n,在這個題中,我知道當k=1的時候(1,3),(2,6)是必敗態那麼也就是說這裡可以猜想出bn=

an+n

∗(k+

1)b_n=a_n+n*(k+1)

bn​=an

​+n∗

(k+1

),為這道題必敗態的通項公式。那麼當我們知道a,b,k怎麼知道是否是必敗態呢,這裡我們用威佐夫博弈的公式推導過程來解答這個題。

同樣的思路,我們可以求出α,但是α是乙個帶有k的式子(這個式子在**中會給出),那麼我們判斷a

na_n

an​是否等於α*n就可以了,這裡的n表示的是前面有多少個必敗態,n=(b-a)/(k+1)。這樣我們就可以判斷是否為必敗態了。(具體細節看**)

**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef

long

long ll;

using namespace std;

const ll mod =

998244353

;const

int n=

1e5+5;

intmain()

if(ak==a)

printf

("0\n");

else

printf

("1\n");

}}

2020杭電多校第九場總結

今天比賽的題比較難,我們隊只通過了t1,419名。比賽開始後,我們隊去看t1,剛開始我提出了乙個思路 貪心,把深度最大的點與根連線,然後計算總的次數。思路出來後,隊友們讓我試一發,我很快寫完後,交了,結果wa,又改了幾次,結果還是wa。這時候,我好像意識到了貪心好像不行,於是我又去想樹形dp,方程推...

2019 杭電多校(第九場)

1002 rikka with cake 思維 題意給你乙個蛋糕 問你切k刀後分成多少塊 思路塊數 交點數 1 樹狀陣列維護橫線有多少條 豎線去統計 隊友 include define ll long long using namespace std struct code tree 500005 ...

2019杭電多校第五場補題

1001 fraction bx a mod p 可以轉換為 bx kp a.因為a的範圍是 0,b 則列出不等式 又因為1p x b k p x 1 frac frac frac xp k b x 1p 據說是乙個經典問題 給你a,b,c,d,求最簡分式x y frac yx 滿足a b x y ...