不懂就问,为什么只给ans答案变量开LL不行非要都开才行啊
查看原帖
不懂就问,为什么只给ans答案变量开LL不行非要都开才行啊
752711
hateful_bug楼主2024/6/6 17:45
#include<bits/stdc++.h>
using namespace std;
const int N=1000005;
long long n,h[N],nx[2*N],b[2*N],v[2*N],tt,s[N];//如果这行改成int只有40分 
bool pd[N];
long long ans;
void zj(int x,int y,int z)
{
	b[++tt]=y;
	v[tt]=z;
	nx[tt]=h[x];
	h[x]=tt;
}
void csh(int x)
{
	s[x]=1;pd[x]=true;
	for(int i=h[x];i;i=nx[i])
	{
		int y=b[i];
		if(pd[y])
		continue;
		csh(y);
		s[x]+=s[y];
	}
}
void dfs(int x)
{
	pd[x]=false;
	for(int i=h[x];i;i=nx[i])
	{
		int y=b[i],z=v[i];
		if(!pd[y])
		continue;
		ans+=abs(n-2*s[y])*z;
		dfs(y);
	}
}
int main()
{
//	freopen("P2052_9","r",stdin);
	scanf("%lld",&n);
	for(int i=1;i<n;i++)
	{
		int x,y,z;
		scanf("%d%d%d",&x,&y,&z);
		zj(x,y,z);
		zj(y,x,z);
	}
	csh(1);
	dfs(1);
	printf("%lld",ans);
	return 0;
}
2024/6/6 17:45
加载中...