玄关求助
查看原帖
玄关求助
737325
_klee_楼主2024/7/22 14:38

rt

只过了第一个和第二个测试点

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
inline int read()
{
	int x=0,f=1;
	char ch=getchar();
	while (ch<'0'||ch>'9')
	{
		if (ch=='-') f=-1;
		ch=getchar();
	}
	while (ch>='0'&&ch<='9')
	{
		x=x*10+ch-48;
		ch=getchar();
	}
	return x*f;
}
struct node{
	int v,w;
};
vector<node> g[N];
int n,siz[N],ans;
void dfs(int rt,int fa)
{
	siz[rt]=1;
	for(int i=0;i<g[rt].size();i++)
	{
		int to=g[rt][i].v;
		if(to==fa) continue;
		dfs(to,rt);
		siz[rt]+=siz[to];
	}
}
void dfs2(int rt,int fa)
{
	for(int i=0;i<g[rt].size();i++)
	{
		int to=g[rt][i].v;
		if(to==fa) continue;
		ans+=abs(n-2*siz[to])*g[rt][i].w;
		dfs2(to,rt);
	}
}
int main( )
{
	n=read();
	for(int i=1;i<n;i++)
	{
		int u,v,w;
		u=read();
		v=read();
		w=read();
		g[u].push_back({v,w});
		g[v].push_back({u,w});
	}
	dfs(1,-1);
	dfs2(1,-1);
	cout<<ans;
 	return 0;
}

2024/7/22 14:38
加载中...