96分求助
查看原帖
96分求助
252551
Xqbk楼主2021/8/26 17:59
#include<iostream>
#include<queue>
using namespace std;
const int MAXN=111111;
int n,k;
int deg[MAXN];
int cnt,head[MAXN],nxt[MAXN<<1],to[MAXN<<1];
void addEdge(int u,int v)
{
	cnt++;
	nxt[cnt]=head[u];
	head[u]=cnt;
	to[cnt]=v;
}
queue<int> Q;
int vis[MAXN];
int dep[MAXN];
int ans;
int num;
int main()
{
	cin>>n>>k;
	for(int i=1;i<n;i++)
	{
		int u,v;
		cin>>u>>v;
		addEdge(u,v);
		addEdge(v,u);
		deg[u]++;
		deg[v]++;
	}
	for(int i=1;i<=n;i++)
	{
		if(deg[i]==1)
		{
			Q.push(i);
		}
	}
	ans=1;
	while(!Q.empty())
	{
		int u=Q.front();
		Q.pop();
		vis[u]=1;
		for(int i=head[u];i;i=nxt[i])
		{
			int v=to[i];
			if(vis[v])continue;
			deg[v]--;
			if(deg[v]==1)
			{
				vis[v]=1;
				dep[v]=dep[u]+1;
				ans=max(ans,dep[v]);
				Q.push(v);
			}
		}
		num++;
		if(num==n-k)
		{
			break;
		}
	}
	cout<<ans;
}
2021/8/26 17:59
加载中...