求助帖一则
查看原帖
求助帖一则
1261547
belif__kibo楼主2025/6/27 21:50

想问为什么

实在找不出问题

但是全RE

#include<bits/stdc++.h>
#define int long long
using namespace std;
struct edge{int v,w,nxt;}e[200000];
int n,k,head[5050],dis[5050],ans,cnt;
int fa[5050],dep[5050],siz[5050],son[5050],top[5050];
void add(int u,int v,int w)
{
	e[++cnt].nxt=head[u];
	e[cnt].v=v;
	e[cnt].w=w;
	head[u]=cnt;
}
int dfs1(int p)
{
	siz[p]=1;
	for(int i=head[p];i;i=e[i].nxt)
	{
		int v=e[i].v,w=e[i].w;
		if(v!=fa[p])
		{
			fa[v]=p;
			dep[v]=dep[p]+1;
			dis[v]=dis[p]+w;
			dfs1(v);
			siz[p]+=siz[v];
			if(son[p]==0||siz[son[p]]<siz[v]) son[p]=v;
		}
	}
}
void dfs2(int p,int hd)
{
	top[p]=hd;
	if(son[p]==0) return;
	dfs2(son[p],hd);
	for(int i=head[p];i;i=e[i].nxt)
	{
		int v=e[i].v;
		if(v!=fa[p]&&v!=son[p]) dfs2(v,v);
	}
}
int lca(int x,int y)
{
	while(top[x]!=top[y])
	{
		if(dep[top[x]]>dep[top[y]]) x=fa[top[x]];
		else y=fa[top[y]];
	}
	if(dep[x]>dep[y]) return y;
	return x;
}
signed main()
{
	cin.tie(0)->sync_with_stdio(0);
	cin>>n>>k;
	for(int i=1,u,v,w;i<n;i++) cin>>u>>v>>w,add(u,v,w),add(v,u,w);
	dfs1(1);
	dfs2(1,1);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			int orz=lca(i,j);
			if(dep[i]+dep[j]-2*dep[orz]!=k) continue;
			ans+=dis[i]+dis[j]-2*dis[orz];
		}
	}
	cout<<ans;
}

link

2025/6/27 21:50
加载中...