求助大佬,帮忙看看,#9TLE
查看原帖
求助大佬,帮忙看看,#9TLE
363495
我爱杨帆楼主2020/11/21 16:08
#include<bits/stdc++.h>
#define int long long 
#define re register
#define inf 1e18
const int sz=3e6+5;
using namespace std;
int read()
{
	char c=getchar();
	int r=0,f=1;
	while((c<'0'||c>'9')&&c!='-')
		c=getchar();
	if(c=='-') {
		f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9') {
		r=r*10+c-'0';
		c=getchar();
	}
	return f*r;
}
struct node
{
	int nxt,to;
}e[sz];
int n,m,w[sz],b[sz],head[sz],cnt,siz[sz];
pair<int ,int > f[1005][1005];
pair<int ,int > tmp[sz];
void add_edge(int x,int y)
{
	e[++cnt]=(node){head[x],y};
	head[x]=cnt;
}
void dfs(int now,int fa)
{
	f[now][1]=make_pair(0,w[now]-b[now]),siz[now]=1;
    for(int i=head[now];i;i=e[i].nxt)
    {
    	if(e[i].to==fa) continue;
    	dfs(e[i].to,now);
        for(int j=1;j<=siz[now]+siz[e[i].to]&&j<=m;j++) tmp[j]=make_pair(0,-inf);
        for(int j=1;j<=siz[now];j++)
          for(int k=1;k<=siz[e[i].to];k++)
           {
           	int fi=f[now][j].first+f[e[i].to][k].first;
           	if(f[e[i].to][k].second>0) fi++;
           	if(fi>tmp[j+k].first) tmp[j+k]=make_pair(fi,f[now][j].second);
           	else if(fi==tmp[j+k].first) tmp[j+k].second=max(tmp[j+k].second,f[now][j].second);
           	if(f[e[i].to][k].second>0) fi--;
           	if(fi>tmp[j+k-1].first)   tmp[j+k-1]=make_pair(fi,f[now][j].second+f[e[i].to][k].second);
           	else if(fi==tmp[j+k-1].first)  tmp[j+k-1].second=max(tmp[j+k-1].second,f[now][j].second+f[e[i].to][k].second);
		   }
        siz[now]+=siz[e[i].to];
		for(int j=1;j<=siz[now];j++)  f[now][j]=tmp[j];   
	}
}
signed main()
{
  int T=read();
  while(T--)
  {
  	int ans=0;
  	n=read(),m=read();
    for(int i=1;i<=n;i++)
    {
	  for(int j=1;j<=m;j++) 
        f[i][j]=make_pair(0,-inf);
      head[i]=0;
	}
	for(int i=1;i<=n;i++) b[i]=read();
  	for(int i=1;i<=n;i++) w[i]=read();
  	for(int i=1;i<n;i++)
  	{
  	  	int u=read(),v=read();
		add_edge(u,v),add_edge(v,u);
	}
	dfs(1,1);
	if(f[1][m].second>0) ans++;
	ans+=f[1][m].first;
	cout<<ans<<endl;  
  }
}
/*
4557430888798830399
*/
2020/11/21 16:08
加载中...