計蒜客t36352 魔法

2021-09-11 01:22:40 字數 1477 閱讀 9144

肯定我要佔滿所有的葉子結點,否則以乙個葉子節點建樹的時候你選的所有點就都在一棵子樹裡,也就不符合要求。反過來,選擇了所有葉子節點,可以證明它是可行的,所以葉子節點構成的集合滿足要求而且最小。

如果k =0

k=0k=

0直接求出度為1

11的點的數目就好了

如果k =1

k=1k=

1,列舉刪哪條邊,我用(x,

y)

(x,y)

(x,y

)表示這條邊連線的兩個點的度分別為x

xx和y

yy,並假設cnt

cntcn

t為葉子的數目

( 1,

1)

(1,1)

(1,1

)時,刪掉這條邊再接著連上這條邊,新的樹的葉子數為cnt

cntcnt(1

,2

)(1,2)

(1,2

)時,刪掉這條邊再連線孤立點和任何乙個葉子節點,新的樹的葉子數目為cnt

cntcnt(1

,d≥3

)(1,d\geq 3)

(1,d≥3

)時,刪掉這條邊再連線孤立點和任何乙個葉子節點,新的葉子數目為cnt

−1

cnt-1

cnt−1(2,

2)

(2,2)

(2,2

)時,刪掉這條邊再連線兩個葉子節點,數目為cnt

cntcnt(d

≥3,d

≥3

)(d\geq 3,d\geq3)

(d≥3,d

≥3)時,刪掉這條邊連線兩個葉子,數目為cnt

−2

cnt-2

cnt−

2

#include

#define cl(x) memset(x,0,sizeof(x))

#define maxn 200010

#define linf (1ll<<60)

#define iinf 0x3f3f3f3f

#define dinf 1e100

#define eps 1e-8

#define mod 1000000007ll

using

namespace std;

typedef

long

long ll;

ll read

(ll x=0)

ll n, k, d[maxn]

, a[maxn]

, b[maxn]

;void

work()

for(i=

1;i<=n;i++

)cnt+

=d[i]==1

; ans=cnt;

for(i=

1;i(k)cout

main()

計蒜客 T1551 魔法少女

前些時間虛淵玄的鉅獻小圓著實火了一把。在黑長直 小炎 往上爬樓去對抗魔女之夜時,她遇到了乙個問題想請你幫忙。因為魔女之夜是懸浮在半空的,所以她必須要爬樓,而那座廢墟一共有 nn 層,而且每層高度不同,這造成小炎爬每層的時間也不同。不過當然,小炎會時間魔法,可以瞬間飛過一層或者兩層 即不耗時 但每次瞬...

計蒜客T2237 魔法 樹

題目大意 資料範圍 題解 這個題挺好玩的 可以用反證法,發現所有葉子必須都得選而且所有葉子都選了合法。故此我們就是要使得,一次操作之後使得葉子的個數最少。這怎麼弄呢?我們發現,如果一條邊相連的兩個點 x 和 y d i 表示點 i 的度數,不妨設 d x le d y 滿足 d y ge 3 且 d...

紅與黑 計蒜客 T1211

題目鏈結 典型的深搜題,基礎題。蒜廠有一間長方形的房子,地上鋪了紅色 黑色兩種顏色的正方形瓷磚。你站在其中一塊黑色的瓷磚上,只能向相鄰的黑色瓷磚移動。請寫乙個程式,計算你總共能夠到達多少塊黑色的瓷磚。輸入格式第一行是兩個整數 w和 h,分別表示 x 方向和 y 方向瓷磚的數量。w 和 h 都不超過 ...