为什么这组数据过不去
查看原帖
为什么这组数据过不去
482610
Mortidesperatslav楼主2024/4/30 21:26

输入

10 48
1 57
2 29
2 33
4 1
3 49
1 33
2 53
7 53
4 41

输出

2
4
1
3
1
1
1
1
1
1

代码

#include<bits/stdc++.h>
using namespace std;
int n, k;
struct node{
	int v;
	long long c;
};
vector<node> G[200005], IG[200005];
long long f[200005], dis[200005];
int dep[200005];
int bin[200005][20];
void dfs(int u, long long ndis, int ndep){
	dis[u] = ndis;
	dep[u] = ndep;
	for (auto p : G[u]){
		int v = p.v;
		long long c = p.c;
		dfs(v, ndis + c, ndep + 1);
	}
}
void binary_dp(){
	for (int i = 1; i <= 20; i++)
		for (int j = 1; j <= n; j++){
			if (j + (1 << i) > n)
				break;
			bin[j][i] = bin[bin[j][i - 1]][i - 1];
		}
}
void multi_fa(int u){
	int v = u;
	for (int i = 20; i >= 0; i--){
		int d1 = dis[bin[v][i]], d2 = dis[u];
	//	cout << d1 << " " << d2 << "\n";
		if (d2 - d1 <= k)
			v = bin[u][i];
	}
	if (!v)
		v = 1;
	f[bin[u][0]]++;
	cout << bin[u][0] << " - " << bin[v][0] << "\n";
	f[bin[v][0]]--;
}
int givef(int u){
	for (auto p : G[u])
		f[u] += givef(p.v);
	return f[u];
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin >> n >> k;
	for (int i = 2; i <= n; i++){
		int u;
		long long w;
		cin >> u >> w;
		G[u].push_back({i, w});
		IG[i].push_back({u, w});
		bin[i][0] = u;
	}
	dfs(1, 0, 0);
	binary_dp();
	for (int i = 1; i <= n; i++)
		multi_fa(i);
	givef(1);
	for (int i = 1; i <= n; i++)
		cout << f[i] + 1 << "\n";
}
2024/4/30 21:26
加载中...