以下代码
#include<cstdio>
#include<iostream>
using namespace std;
int m,k,tot=1,cnt=0,maxx=0;
int h[200012],dit[200012];
struct str
{
int next,to;
}e[200012];
void add(int x,int y)
{
e[++tot].next=h[x];
e[tot].to=y;
h[x]=tot;
}
void dfs(int k,int f)
{
for(int i=h[k];i;i=e[i].next)
{
int v=e[i].to;
if(v!=f)
{
dfs(v,k);
maxx=max(maxx,dit[k]+dit[v]+1);
dit[k]=max(dit[k],dit[v]+1);
}
}
}
int main()
{
scanf("%d%d",&m,&k);
for(int i=1;i<m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(1,-114514);
cnt=maxx+1;
if(k==0)
{
printf("%d\n",cnt);
for(int i=1;i<cnt;i++)
printf("%d %d\n",i,i+1);
}
else
{
int x=max(1,cnt-2);
printf("%d\n",x);
for(int i=1;i<x;i++)
printf("%d %d\n",i,i+1);
}
return 0;
}
但如果将maxx的初始值改成-1就会WA第一个点
蒟蒻比较困惑/yun