c.cover the tree
首先你從以乙個度不為1的點作為根節點。然後你每次都連線乙個葉子節點,這樣顯然是所有的邊都可以被覆蓋。即答案為度為1的點的個數,但是這樣顯然很大,可以優化,可以相當於把根節點當作中間節點,讓葉子節點兩兩相連,顯然答案已經出來了,就是(葉子+1)/2
但是怎麼兩兩配對是乙個問題,下圖提供了證明:
#include #includeview code#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++)
}
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 的子矩陣的最...