只过了hack求助
查看原帖
只过了hack求助
1384158
Alvin0228楼主2024/8/31 15:24
#include<bits/stdc++.h>
using namespace std;
int head[600005],num_edge;
struct Edge
{
	int nxt,to;
}edge[600005];
void add_edge (int from,int to)
{
	edge[++num_edge].nxt=head[from];
	edge[num_edge].to=to;
	head[from]=num_edge;
}
int dis[600005],maxn,maxm,ans;
void dfs1(int x,int fa,int sum)
{
	if (maxn<sum)
	{
		maxn=sum;
		maxm=x;
	}
	for (int i=head[x];i;i=edge[i].nxt)
	{
		int j=edge[i].to;
		if (j==fa) continue;
		dfs1(j,x,sum+dis[j]-2);
	}
}
void dfs2(int x,int fa,int sum)
{
	if (ans<sum)
	{
		ans=sum;
	}
	for (int i=head[x];i;i=edge[i].nxt)
	{
		int j=edge[i].to;
		if (j==fa) continue;
		dfs1(j,x,sum+dis[j]-2);
	}
}
int main ()
{
//	freopen(".in","r",stdin);
//	freopen(".out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	int n,m;
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		dis[i]++;
	}
	for (int i=1;i<=m;i++)
	{
		int u,v;
		cin>>u>>v;
		add_edge(u,v);
		add_edge(v,u);
		dis[u]++;
		dis[v]++;
	}
	dfs1(1,0,dis[1]);
	dfs2(maxm,0,dis[maxm]);
	cout<<ans;
	return 0;
}

2024/8/31 15:24
加载中...