求助RE
查看原帖
求助RE
85977
SSpider_Man楼主2023/11/17 08:15
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll inline read(){
	ll num=0,f=1;
	char ch=getchar();
	while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&& ch<='9'){num=(num<<3)+(num<<1)+(ch^48);ch=getchar();}
	return num*f;
}
const int N=1e5+5,K=25,inf=1e7;
int n,k,t;
int f[N][K],ls[K];
vector<int> e[N];
void dfs(int u,int fa){
	f[u][0]=1;
	f[u][1]=0;
//	if(e[u].size()==1) cout<<u<<"\n";
	for(int i=0;i<e[u].size();i++){
		int v=e[u][i];
		if(v==fa) continue;
		dfs(v,u);
		for(int j=0;j<=k+1;j++) ls[j]=f[u][j],f[u][j]=inf;
		for(int j=0;j<=k+1;j++){
			for(int s=0;s<=k;s++){
				f[u][max(j,s+1)]=min(f[u][max(j,s+1)],ls[j]+f[v][s]);
			}
		}
	}
	for(int j=1;j<=k+1;j++){
		f[u][0]=min(f[u][0],f[u][j]+1);
	}
}
int main(){

	freopen("P3942_2.in","r",stdin);
	scanf("%d%d%d",&n,&k,&t);
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		e[u].push_back(v);
		e[v].push_back(u);
	}
	for(int i=1;i<=n;i++)
		for(int j=0;j<=k+1;j++)
			f[i][j]=inf;
	dfs(1,0);
	int ans=inf;
	for(int i=0;i<=k;i++) ans=min(ans,f[1][i]);
	printf("%d",ans);
	return 0;
}

2023/11/17 08:15
加载中...