关于本题subtask1第一个点
  • 板块P7807 魔力滋生
  • 楼主Surget
  • 当前回复4
  • 已保存回复4
  • 发布时间2021/8/18 20:57
  • 上次更新2023/11/4 10:09:17
查看原帖
关于本题subtask1第一个点
299756
Surget楼主2021/8/18 20:57

以下代码

#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

2021/8/18 20:57
加载中...