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;
}

Download