请帮忙找一下错误
查看原帖
请帮忙找一下错误
209825
cd2020楼主2020/9/15 13:43
#include<bits/stdc++.h>
using namespace std;
const int maxn=2e6+10;
int tot,head[maxn],ver[maxn],next[maxn],edge[maxn];
void add(int x,int y,int z)
{
	ver[++tot]=y;edge[tot]=z;
	next[tot]=head[x],head[x]=tot;
}
int n,k;
int fa[maxn],d[maxn],sum[maxn],f[maxn],faq,stx,maxd,ans=0;
void dfs(int x,int pre)
{
	if(d[x]>maxd)maxd=d[x],faq=x;
	for(int i=head[x];i;i=next[i])
	{
		int y=ver[i];
		if(y==pre)continue;
		d[y]=d[x]+1;
		fa[y]=x;
		dfs(y,x);
	}
}
void dfs2(int x,int pre)
{
	for(int i=head[x];i;i=next[i])
	{
		int y=ver[i];
		if(y==pre)continue;
		if(f[x]==1&&f[y]==1)edge[i]=-1;
		dfs(y,x);
	}
}
void dfs3(int x,int pre)
{
	
	for(int i=head[x];i;i=next[i])
	{
		int y=ver[i];
		if(y==pre)continue;
		dfs(y,x);
		ans=max(ans,sum[x]+sum[y]+edge[i]);
		sum[x]=max(sum[x],sum[y]+edge[i]); 
	}
}
int main()
{
	cin>>n>>k;
	for(int i=1,x,y;i<n;i++)
	{
		cin>>x>>y;
		add(y,x,1);
		add(x,y,1);
	}
	dfs(1,0);memset(d,0,sizeof(d));memset(fa,0,sizeof(fa));maxd=0;
	dfs(faq,0);
	stx=faq;
	for(int i=1;i<=d[faq]+1;i++)f[stx]=1,stx=fa[stx];
	dfs2(1,0);
	if(k==1)
	{
		cout<<2*(n-1)-d[faq]+1;
		return 0;
	}
	dfs3(1,0);
	cout<<2*n-ans-d[faq];
	return 0; 

}








2020/9/15 13:43
加载中...