样例过了,全wa求助
查看原帖
样例过了,全wa求助
570507
witw楼主2022/2/4 19:42
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+5;
int n,k,zj,num;
int dep[N],maxdep[N],ans[N],f[N];
int e[2*N],ne[2*N],h[2*N],idx;
bool cmp(int x,int y){
	return x>y;
}
void add(int x,int y){
	e[idx]=x,ne[idx]=h[y],h[y]=idx++;
}
void dfs1(int u,int v){
	if(dep[u]>zj){
		zj=dep[u];
		num=u;
	}
	for(int i=h[u];i!=-1;i=ne[i]){
		int k=e[i];
		if(k==v)continue;
		dep[k]=dep[u]+1;
		dfs1(k,u);
	}
}
void dfs2(int u,int v){
	if(dep[u]>zj){
		zj=dep[u];
		num=u;
	}
	for(int i=h[u];i!=-1;i=ne[i]){
		int k=e[i];
		if(k==v)continue;
		f[k]=u;
		dfs2(k,u);
	}
}
void dfs_k(int u,int v){
	maxdep[u]=dep[u];
	for(int i=e[u];i!=-1;i=ne[i]){
		int k=e[i];
		if(k==v)continue;
		dep[k]=dep[u]+1;
		dfs_k(k,u);
		maxdep[u]=max(maxdep[u],maxdep[k]);
	}
}
int main(){
	memset(h,-1,sizeof h);
	cin>>n>>k;
	for(int i=1;i<n;++i){
		int x,y;
		cin>>x>>y;
		add(x,y);
		add(y,x);
	}
	dfs1(1,0);
	memset(dep,0,sizeof dep);
	zj=0;
	dfs2(num,0);
	int kkk=num;
	for(int i=1;i<=(dep[num]+1)/2;i++){
		kkk=f[kkk];
	}
	memset(dep,0,sizeof dep);
	dfs_k(kkk,0);
	for(int i=1;i<=n;++i){
		ans[i]=maxdep[i]-dep[i];
	}
	sort(ans+1,ans+1+n,cmp);
	cout<<ans[k+1]+1<<endl; 
	return 0;
}
2022/2/4 19:42
加载中...