제출 #521929

#제출 시각아이디문제언어결과실행 시간메모리
521929sidonCat in a tree (BOI17_catinatree)C++17
100 / 100
257 ms244272 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define z(X, Y) (X = max(X, Y))
#define get(X, Y) (Y < int(size(X)) ? X[Y] : 0)
 
int main() {
	ios::sync_with_stdio(0), cin.tie(0);
 
	int N, D; cin >> N >> D;
 
	vector<int> g[N];
	deque<int> d[N];
 
	for(int i = 1, j; i < N; ++i) {
		cin >> j;
		g[j].push_back(i);
	}
 
	for(int u = N; u--; ) {
		for(const int &v : g[u]) {
			if(size(d[u]) < size(d[v]))
				d[u].swap(d[v]);
 
			for(int i = 0; i < size(d[v]); i++) {
				int k = max(i, D - i - 2);
				z(d[u][i], max(d[u][i] + get(d[v], k), d[v][i] + get(d[u], k)));
			}
			for(int i = size(d[v])-1; i-->0; )
				z(d[u][i], d[u][i+1]);
		}
 
		d[u].push_front(max(get(d[u], 0), 1 + get(d[u], D - 1)));
	}
 
	cout << d[0][0];
}

컴파일 시 표준 에러 (stderr) 메시지

catinatree.cpp: In function 'int main()':
catinatree.cpp:25:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::deque<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   25 |    for(int i = 0; i < size(d[v]); i++) {
      |                   ~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...