求助,wa+mle
查看原帖
求助,wa+mle
742275
_czy楼主2024/8/7 16:23
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+3;
int n,m,op,x,y,l[N],r[N],d[N],v[N],h[N],c[N],sz[N],rt[N];
ll s[N],ans;
struct edge{
	int to,nxt;
}e[N];
int merge(int x,int y){
	if(!x||!y)return x+y;
	if(v[x]<v[y])swap(x,y);
	r[x]=merge(r[x],y);
	if(d[l[x]]<d[r[x]])swap(l[x],r[x]);
	d[x]=d[r[x]]+1,sz[x]=sz[l[x]]+sz[r[x]]+1,s[x]=s[l[x]]+s[r[x]]+v[x];
	return x;
}
void dfs(int x){
	rt[x]=x,s[x]=v[x],sz[x]=1;
	for(int i=h[x];i;i=e[i].nxt){
		dfs(y=e[i].to);
		rt[x]=merge(rt[x],rt[y]);
	}
	while(s[rt[x]]>m){
		cout<<sz[rt[x]]<<' ';
		rt[x]=merge(l[rt[x]],r[rt[x]]);
		cout<<sz[rt[x]]<<'\n';
	}
	ans=max(ans,(ll)c[x]*sz[rt[x]]);
}
int main(){
	ios::sync_with_stdio(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>x>>v[i]>>c[i];
		e[i]={i,h[x]},h[x]=i;
	}
	dfs(1);
	cout<<ans;
}
2024/8/7 16:23
加载中...