社区讨论

蒟蒻求条

P1612[yLOI2018] 树上的链参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mjya0qmz
此快照首次捕获于
2026/01/03 20:25
2 个月前
此快照最后确认于
2026/01/07 17:20
上个月
查看原帖
CPP
#include<bits/stdc++.h>
#define ll long long
#define MAX 1000001
using namespace std;
vector<int> E[MAX];
vector<int> sum;
int w[MAX], c[MAX];
int ans[MAX], n, p, pos;
void dfs(int u){
	sum.push_back(sum.back() + w[u]);
	int pos = 0;
	int l = 0, r = sum.size() - 1;
	while(l <= r){
		int mid = l + (r - l) / 2;
		if (sum.back() - sum[mid] <= c[u]){
			pos = mid;
			r = mid - 1;
		}else{
			l = mid + 1;
		}
	}
	ans[u] = sum.size() - pos - 1;
	for (auto i : E[u]) dfs(i);
	sum.pop_back();
}
int main(){
	cin >> n;
	for ( int i = 2 ; i <= n ; i++ ){
		cin >> p;
		E[p].push_back(i);
	}
	for ( int i = 1 ; i <= n ; i++ ){
		cin >> w[i];
	}
	for ( int i = 1 ; i <= n ; i++ ){
		cin >> c[i];
	}
	sum.push_back(0);
	dfs(1);
	for ( int i = 1 ; i <= n ; i++ ){
		cout << ans[i] << " ";
	}
	return 0;
}

用的前缀和加二分,帮帮本蒟蒻吧

回复

1 条回复,欢迎继续交流。

正在加载回复...