請原諒我的錯字><
樹是資料結構的一種,有很一些性質,不過這題要知道的只有「根」。根在樹中就是最上面的那一個點,也就是沒有父節點的那個點。
這題第一個部份是要輸出跟節點編號,方法是每個點紀錄他是否有父節點,在輸入完所有節點的關係後,沒有父節點的就是根喔。
Learn More →
可以從離根最遠的節點開始計算答案,往回推算。每個節點的
而
第一個實作上問題是存圖,你需要把題目給的樹資訊記錄下來。我們可以使用 vector 存每個節點的所有小孩。 (vector 是 c++ 可以動態變大的陣列)
for (ll j = 1; j <= sz; j++) {
cin >> child;
edge[i].push_back(child);
has_par[child] = true;
}
可以用 for loop 取得一個點所有小孩
for (auto child : edge[current]) {
/* do something*/
}
求答案可以用遞迴的技巧,在圖上遞迴的演算法叫做 DFS,他的概念是「相信」呼叫一個函數可以找出所有小孩的
void dfs(ll current) {
for (auto child : edge[current]) {
dfs(child); // 相信他會找出 h[chlid],, H[child]
// 照定義求 h[current], H[current]
h[current] = max(h[current], h[child] + 1);
H[current] += H[child];
}
H[current] += h[current]; // 記得加上自己的 h(x)
}
附上會 AC 的 Code:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll; // 避免 overflow
const ll MAXN = 100005;
ll n, h[MAXN], H[MAXN];
bool has_par[MAXN];
vector<ll> edge[MAXN];
void dfs(ll current) {
for (auto child : edge[current]) {
dfs(child);
h[current] = max(h[current], h[child] + 1);
H[current] += H[child];
}
H[current] += h[current];
}
/********** Good Luck :) **********/
int main()
{
cin.tie(0); // 讓你程式跑更快
cin >> n;
for (ll i = 1; i <= n; i++) {
ll sz, child;
cin >> sz;
for (ll j = 1; j <= sz; j++) {
cin >> child;
edge[i].push_back(child);
has_par[child] = true;
}
}
ll root = -1;
for (ll i = 1; i <= n; i++) {
if (has_par[i] == false) {
root = i;
}
}
dfs(root);
cout << root << endl << H[root] << endl;
return 0;
}
2022 YTP 比賽導入了 TPS 系統,今年是透過一台額外的機器負責管理題目上傳,以下是把 TPS 安裝入 YTP CMS 系統的方法: CMS 要讓 CMS 支援 TPS 需要在 /cms/cmscontrib/loaders 中加入 TPS 的引用程式。這個部份我們 merge 了去年的 CMS source,保留了原本的功能同時加入了 TPS。 今年的 TPS 有一個問題是 subtask 順序不符合 subtasks.json 設定,這個問題也在我們的 repo 修正完成。 Docker 我們的改動和原本的 YTP CMS 系統架構相容,所以只需要使用新的 docker image 。
Sep 23, 2022比賽心態準備 2021.3.18 @ TOI 2021 1! ToMmyDong $whoami 陳冠辰 國立新竹科學園區實驗高級中等學校 科學班 台大資工 一年級 今年 2020 IOI 銀牌
Sep 11, 2021颱風分析 同之前討論 學測預測 同之前討論 電路排版
Jul 4, 2020一定要測範測 傳完不要在上傳畫面等待 Fail 馬上印出來 重看題目 看 code 對pi
Jul 4, 2020or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up