2020牛客暑期多校訓練營(第二場)

2022-05-02 20:24:11 字數 797 閱讀 9410

c.cover the tree

首先你從以乙個度不為1的點作為根節點。然後你每次都連線乙個葉子節點,這樣顯然是所有的邊都可以被覆蓋。即答案為度為1的點的個數,但是這樣顯然很大,可以優化,可以相當於把根節點當作中間節點,讓葉子節點兩兩相連,顯然答案已經出來了,就是(葉子+1)/2

但是怎麼兩兩配對是乙個問題,下圖提供了證明:

#include #include 

#include

#include

using

namespace

std;

const

int maxn=2e5+7

;int

n, m, t, ans[maxn];

intcnt, head[maxn];

intdeg[maxn], root;

struct

nodee[maxn

<<1

];void add(int u,int

v)void dfs(int u, int

pre)

}int

main ()

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

}dfs(root, -1

);

if(t%2==1) ans[++t] =root;

printf (

"%d\n

", t/2

);

for(int i = 1; i <= t/2; i++)

}

view code

2020牛客暑期多校訓練營(第二場) A

時間限制 c c 3秒,其他語言6秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 題目描述 given n strings s 1,s 2,cdots,s ns1 s2 sn now define f s,t as the maximum i t...

2020牛客暑期多校訓練營(第二場

b.boundary 數學 以乙個點為基礎,暴力列舉另外乙個點就可以,就是算圓心的時候有點廢手。ac include inline long long read while c 0 c 9 return x s using namespace std define newnode treenode ...

2020牛客暑期多校訓練營(第二場)

給你同一天的兩個時刻,請你計算這兩個時刻中間相隔多少秒?注意一下輸入的格式。include includeusing namespace std int main lcm i,j 其中 lcm 是最小公倍數的簡寫 the least common multiple 求每個大小為 k k 的子矩陣的最...