STONE1 - Rải sỏi
Tác giả: happyboy99x
Ngôn ngữ: C++
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
#define TR(v,i) for(typeof((v).begin()) i=(v).begin();i!=(v).end();++i)
vector<vector<int> > c;
int dfs(int u) {
if(c[u].size() == 0) return 1;
priority_queue<int> q;
TR(c[u], v) q.push(dfs(*v));
int res = q.top(), now = res;
for( ; !q.empty(); q.pop()) {
while(now < q.top()) ++now, ++res;
--now;
}
return res;
}
void enter() {
int n; scanf("%d", &n);
c.assign(n, vector<int>());
for(int p, m; scanf("%d%d", &p, &m) == 2; ) {
--p;
for(int i = 0; i < m; ++i) {
int u; scanf("%d", &u);
c[p].push_back(--u);
}
}
}
int main() {
enter();
printf("%d\n", dfs(0));
return 0;
}