Tree Gym 101964C(二分 搜尋)

2021-08-31 07:34:51 字數 1099 閱讀 6979

借鑑了一位大佬的思路

題目鏈結

題意給你一顆有n個節點的最小生成樹,每個節點都有乙個顏色,1代表黑色,0代表白色,讓你從n個節點中選擇至少m個黑色節點。 求這m個黑色節點中任意兩個黑色節點的最遠距離的最小值。

分析:首先,題目中的」使得最大值最小「這句話就非常符合二分的條件了。因此我們考慮對答案(兩個黑點的最遠的距離)進行二分。

現在就要考慮如何進行check。

對於每乙個二分值k,我們考慮先用bfs遍歷整顆樹,然後利用bfs的性質(距離當前點的所有已bfs過且小於等於k的那些點,他們之間兩兩距離也小於等於k),我們可以用dfs去遍歷這些點集,判斷點集中的黑點的個數與需要選取的黑點個數m之間的關係即可(如果數量》=m,則右指標左移動;反之左指標右移)。

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1000+10

;int n,m;

int a[maxn]

,vis[maxn]

;vector<

int>g[maxn]

;int

dfs(

int now,

int dis,

int fa,

int k)

return sum;

}int

check

(int k)

///本質為乙個bfs}}

return0;

}int

main()

int l=

0,r=n,mid;

while

(lprintf

("%d\n"

,r);

}return0;

}

C 實驗二簡單的C程式設計(二)

1.整數s四則運算。輸入兩個正整數,計算並輸出他們的和 差 積 商。include intmain void 2.階梯電價。為了提倡居民節約用電,某省電力公司執行 階梯電價 的計費模式。即安裝一戶一表的使用者電價分為兩個 階梯 月用電量在50kw h 含50kw h 以內的,電價為0.53元 kw ...

c 對c的加強(二)

c的關鍵字修飾 這個關鍵字請求編譯器盡可能的將變數存在cpu內部暫存器中,而不是通過記憶體定址訪問,以提高效率。省去了cpu到記憶體中抓取資料的時間。c 的公升級 volatile 防止編譯器將所修飾的變數載入到暫存器中進行優化 c 引用 vs 指標 都可以做形參和返回值 指標容易造成段錯誤 引用則...

C 學習筆記(二)

在學習最新的c 標準過程中會碰到很多新問題,這些問題有時候很難理解為什麼會發生。更奇怪的是,似乎跟開發工具有關。如下面這個在vs2005下的例子 word istatus ifstream ifs if i it szprlfile,0 0 std locale global std locale ...