題幹:
傳說,鳳凰是百鳥之王。有一天,鳳凰要召開百鳥大會,百鳥國是乙個由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號城市到其他城市的最短路,如果無法到達,輸出 ...