51nod 1737 配对 树的重心

传送门:51nod1737

题意:中文题。

思路:画图可以得知对于每一条边,它对答案的贡献一定不超过它两端子树的大小的较小值,并且使答案最大的每条路径都应该是经过重心的,因此题目可以转化为求所有点到重心的权值和。(直接按发现的规律求也可以)。

代码:

#include<stdio.h>
#include<bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
typedef pair<int,int> P;
const int MAXN = 100010;
int pre[MAXN], sz[MAXN];
int cnt, max_sz = inf;
int n, rt;
ll ans = 0;
struct node{
	int v, w, next;
	node(int _v = 0, int _w = 0, int _next = 0) : v(_v), w(_w), next(_next) {}
} mp[MAXN << 1];
void init()
{
	memset(pre, -1, sizeof(pre));
	cnt = 0;
}
void add(int u, int v, int w)
{
	mp[cnt] = node(v, w, pre[u]); pre[u] = cnt++;
}
void dfs(int u, int fa)
{
	sz[u] = 1;
	int tmp = 0;
	for(int i = pre[u]; ~i; i = mp[i].next)
	{
		int v = mp[i].v;
		if(v == fa) continue;
		dfs(v, u);
		sz[u] += sz[v];
		tmp = max(tmp, sz[v]);
	}
	tmp = max(tmp, n - sz[u]);
	if(tmp < max_sz)
	{
		max_sz = tmp;
		rt = u;
	}
}
void get_ans(int u, int fa, ll dis)
{
	ans += dis;
	for(int i = pre[u]; ~i; i = mp[i].next)
	{
		int v = mp[i].v;
		if(v == fa) continue;
		get_ans(v, u, dis + mp[i].w);
	}
}
int main()
{
	int u, v, w;
	init();
	scanf("%d", &n);
	for(int i = 1; i < n; i++)
	{
		scanf("%d %d %d", &u, &v, &w);
		add(u, v, w);
		add(v, u, w);
	}
	dfs(1, -1);
	get_ans(rt, -1, 0);
	cout << ans << endl;
 	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值