wa#33,求助
查看原帖
wa#33,求助
365532
Mr_ll楼主2022/11/15 09:56
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1e6+10;
int n,k,u,v,hea[N],to[N],net[N],cnt,dep[N],lduan,rduan,f[N],maxdep[N],ke[N],ans=1e9;
int read() {
	int x=0;char ch=getchar();
	while(ch<'0'||ch>'9') ch=getchar();
	while(ch>='0'&&ch<='9') 
		x=(x<<3)+(x<<1)+(ch^48),
		ch=getchar();
	return x;
}
void add(int x,int y) {
	to[++cnt]=y;
	net[cnt]=hea[x];
	hea[x]=cnt;
}
void dfs1(int x,int fa) {
	dep[x]=dep[fa]+1;
	for(int i=hea[x];i;i=net[i]) {
		int y=to[i];
		if(y==fa) continue;
		dfs1(y,x);
	}
}
void dfs2(int x,int fa) {
	dep[x]=dep[fa]+1;
	for(int i=hea[x];i;i=net[i]) {
		int y=to[i];
		if(y==fa) continue;
		dfs2(y,x);
		f[y]=x;
	}
}
void dfs3(int x,int fa) {
	maxdep[x]=dep[x]=dep[fa]+1;
	for(int i=hea[x];i;i=net[i]) {
		int y=to[i];
		if(y==fa) continue;
		dfs3(y,x);
		maxdep[x]=max(maxdep[x],maxdep[y]);
	}
}
bool cmp(int a,int b) {
	return a>b;
}
void qiuzhij() {
	dfs1(1,0);
	lduan=1;
	for(int i=2;i<=n;i++) 
		if(dep[i]>dep[lduan]) 
			lduan=i;
	
	memset(dep,0,sizeof(dep));
	dfs2(lduan,0);
	rduan=lduan;
	for(int i=1;i<=n;i++) 
		if(dep[i]>dep[rduan]) 
			rduan=i;
	int mid=rduan;
	for(int i=1;i<=(dep[rduan]+1)>>1;i++) mid=f[mid];
	memset(dep,0,sizeof(dep));
	dfs3(mid,0); 
	for(int i=1;i<=n;i++) ke[i]=maxdep[i]-dep[i];
	sort(ke+1,ke+1+n,cmp);
	printf("%d\n",ke[k+1]+1);
}
int main() {
	n=read();k=read();
	for(int i=1;i<n;i++) {
		u=read();v=read();
		add(u,v);
		add(v,u);
	}
	qiuzhij();
	return 0;
} 
2022/11/15 09:56
加载中...