UKE求助
查看原帖
UKE求助
546301
Suite_No1_G楼主2023/6/6 18:16

RT。

#include<bits/stdc++.h>
using namespace std;
#define int long long

const int maxn=2e5+10;
struct edge{
	int v;
	int a,b;
};

vector<edge> G[maxn];
int suma[maxn],sumb[maxn];
int depth[maxn],dp[maxn][20];

void dfs(int u,int fa){
	depth[u]=depth[fa]+1;
	dp[u][0]=fa;
	
	for (int i=1;i<20;i++) dp[u][i]=dp[dp[u][i-1]][i-1];
	
	for (int i=0;i<(int)G[u].size();i++){
		int v=G[u][i].v;
		if (v==fa) continue;
		suma[v]=suma[u]+G[u][i].a;
		sumb[v]=sumb[u]+G[u][i].b;
		dfs(v,u);
	}
}

signed main(){
	int T;
	scanf("%lld",&T);
	int n=0;
	
	while (T--){
		for (int i=1;i<=n;i++) G[i].clear();
		memset(suma,0,sizeof(suma)); memset(sumb,0,sizeof(sumb));
		memset(dp,0,sizeof(dp)); memset(depth,0,sizeof(depth)); 
		scanf("%lld",&n);
		for (int j=2;j<=n;j++){
			int f,a,b;
			scanf("%lld%lld%lld",&f,&a,&b);
			G[f].push_back((edge){j,a,b});
		}
		
		depth[0]=-1;
		dfs(1,0);
		
		for (int j=2;j<=n;j++){
			int num=suma[j]; 
			
			int u=j;
			for (int i=19;i>=0;i--){
				while (sumb[dp[u][i]]>num) u=dp[u][i];
			}
			
			if (sumb[u]>num) u=dp[u][0];
			
			printf("%lld ",depth[u]);
		}
		
		printf("\n");
	}
	return 0;
}

编译信息:

UnexpectedResponse: got an unexpected response when requesting `https://codeforces.com/data/submitSource`: error decoding response body: invalid digit found in string
2023/6/6 18:16
加载中...