牛客 157B 鳳凰(樹上並查集,dfs)

2021-09-13 01:13:31 字數 1810 閱讀 9102

題幹:

傳說,鳳凰是百鳥之王。有一天,鳳凰要召開百鳥大會,百鳥國是乙個由n個節點組成的樹,每個節點有乙隻鳥,開會的節點定在1號節點。每只鳥可以花費1s通過一條邊,由於每根樹枝(邊)的載重有限,只允許乙隻鳥同時通過。作為會議的策劃師,htbest想知道百鳥國的所有鳥在1點集合最少需要多少秒。

第一行有乙個正整數n,表示百鳥國節點個數。

接下來n-1行,第i行兩個正整數ai,bi用空格隔開,表示樹上節點ai,bi之間有一條邊。

第一行乙個整數,表示集合最少需要的時間。
示例1

複製

3

1 22 3

複製

2
示例2

複製

3

1 21 3

複製

1
示例3

複製

4

1 22 3

2 4

複製

3
對於100%的測試資料:

1 ≤ n ≤ 1000000

資料量較大,注意使用更快的輸入輸出方式。

解題報告:

這題用dfs會超時我也不知道為什麼。o(n)的複雜度。。。

ac**:

#include#include#include#include#include#include#include#include#include#include#define ll long long

#define pb push_back

#define pm make_pair

using namespace std;

const int max = 2e6 + 5;

int n,m;

vectorvv[max];

int dfs(int cur,int rt)

return res;

} inline int read() while('0' <= ch && ch <= '9') return x * f;

}int f[max],num[max];

int getf(int v)

bool merge(int u,int v)

else

}int main()

int ans = 0 ;

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

cout << ans;

return 0;

}

tle**:

#include#include#include#include#include#include#include#include#include#include#define ll long long

#define pb push_back

#define pm make_pair

using namespace std;

const int max = 2e6 + 5;

int n,m;

vectorvv[max];

int dfs(int cur,int rt)

return res;

}int main()

int ans = 0 ;

for(auto v : vv[1])

cout << ans;

return 0;

}

並查集 牛客1080 B

tokitsukaze有n個數,需要按順序把他們插入雜湊表中,雜湊表的位置為0到n 1。插入的規則是 剛開始雜湊表是空的。對於乙個數x,在雜湊表中,如果 x mod n 的位置是空的,就把x放在 x mod n 的位置上。如果不是空的,就從 x mod n 往右開始找到第乙個空的位置插入。若一直到n...

堆 並查集 牛客模擬賽 牛半仙的魔塔

d 牛 半仙的魔 塔d 牛半仙的魔塔 d 牛半仙的 魔塔牛半仙的妹子被大魔王抓走了,牛半仙為了就他的妹子,前往攻打魔塔。魔塔為一棵樹,牛半仙初始在一號點。牛半仙有攻擊,防禦,血量三個屬性。除一號點外每個點都有魔物防守,魔物也有攻擊,防禦,血量三個屬性。每個怪物後面都守著一些藍寶石,獲得1藍寶石可增加...

牛客網機試題 最短路徑(並查集)

n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離 第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路 接下來m行兩個整數,表示相連的兩個城市的編號n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出 ...