悬关,WA#4
查看原帖
悬关,WA#4
415975
abner1101楼主2023/12/14 20:22

WA#4

#include<bits/stdc++.h>
using namespace std;
const int maxn=1000000+10;
vector<int> vec[maxn];
int n,u,v,mx=0,id,f[maxn],k,h1[maxn],h[maxn],cnt[maxn],ans;
void dfs(int x,int fa,int st){
	f[x]=fa;
	if(st>mx){
		mx=st;id=x;
	}
	for(int i=0;i<vec[x].size();i++){
		if(vec[x][i]!=fa)dfs(vec[x][i],x,st+1);
	}
}
void ddfs(int x,int fa,int st){
	h1[x]=st;h[x]=h1[x];
	for(int i=0;i<vec[x].size();i++){
		if(vec[x][i]!=fa&&vec[x][i]!=id)ddfs(vec[x][i],x,st+1);
		h[x]=max(h[x],h[vec[x][i]]);
	}
}
bool cmp(int q,int p){
	return q>p;
}
int main(){
	cin>>n>>k;
	for(int i=1;i<=n-1;i++){
		scanf("%d%d",&u,&v);
		vec[v].push_back(u);
		vec[u].push_back(v);
	}
	dfs(1,0,0);
	mx=0;
	dfs(id,0,0);
	for(int i=1;i<=mx/2;i++)id=f[id];
	ddfs(id,0,0);
	for(int i=1;i<=n;i++)h[i]-=h1[i];
	sort(h+1,h+n+1,cmp);
	cout<<h[k+1]+1;
	return 0;
}
2023/12/14 20:22
加载中...