JZOJ 5406. 【NOIP2017提高A组模拟10.10】Tree

Description

给定一颗n 个点的树,树边带权,试求一个排列P,使下式的值最大

Description

其中maxflow(s; t) 表示从点s 到点t 之间的最大流,即从s 到t 的路径上最小的边权

Input

第一行一个整数n,表示点数
下接n - 1 行,每行三个数u, v, w 表示一条连接点u 和点v 权值为w 的边

Output

输出一行一个整数,表示答案

Sample Input

2
1 2 2333

Sample Output

2333

Data Constraint

对于前5% 的数据满足n <= 8
对于前40% 的数据满足n <= 200
对于前60% 的数据满足n <= 2000
对于100% 的数据满足n <= 100000

Solution

  • 你绝对不会想到这道题的结论有多么简洁!——答案为所有边的边权和!

  • 什么?为什么呢?

  • 首先,我们不能避免计算最短边的答案,总会经过的。

  • 同样,次短边也要加进去,因为 N 个点的排列不得不经过这条边。

  • 同理,第三小、第四小……最大边,都要加入答案,因为答案为 n1 条边之和。

-于是——答案为所有边的边权和。

Code

#include<cstdio>
using namespace std;
long long ans;
inline int read()
{
    int X=0,w=1; char ch=0;
    while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}
    while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
    return X*w;
}
int main()
{
    int n=read();
    while(--n)
    {
        read(),read();
        ans+=read();
    }
    printf("%lld",ans);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值