博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P1268 树的重量
阅读量:5093 次
发布时间:2019-06-13

本文共 1025 字,大约阅读时间需要 3 分钟。

考虑一个节点一个节点加入树中,每次计算一下对答案的贡献

只有两个点时树的形态是唯一确定的

三个点时第三个点应该是从边上分叉出来的

 

那么增加的长度显然为 (dis_bc+dis_ac-dis_ab)/2

第四个点也应该是分叉出来的

但是是从哪分叉的我们还要讨论一下

可以发现,唯一合法的情况当且仅当增加的长度最小

因为如果增加的长度大于最小的增长长度,那么必定会有某些约束条件被破坏

这个自己画图一下就可以发现的

所以每次加点时必须找增加长度最小的方案

然后就可以暴力枚举了

#include
#include
#include
#include
#include
using namespace std;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<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*f;}const int N=57,INF=1e9+7;int n,ans;int mp[N][N];int main(){ n=read(); while(n) { for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) mp[i][j]=mp[j][i]=read(); ans=0; for(int k=2;k<=n;k++) { int mi=INF; for(int i=1;i
>1);//枚举最小的方案 ans+=mi;//加入答案 } printf("%d\n",ans); n=read(); } return 0;}

 

转载于:https://www.cnblogs.com/LLTYYC/p/9864595.html

你可能感兴趣的文章
POJ读书笔记2.1 —— 鸡兔笼带
查看>>
转载--Github优秀java项目集合(中文版) - 涉及java所有的知识体系
查看>>
公司内网机器vm ubuntu proxy 设置
查看>>
Android2.1--如何在android模拟器上安装与删除.APK文件
查看>>
聚类分析二:DBSCAN算法
查看>>
高级c++头文件bits/stdc++.h
查看>>
【LeetCode】347-前K个高频元素
查看>>
置换元素与不可置换元素
查看>>
非root用户安装java版本
查看>>
css引用与html语义化
查看>>
luoguP3723 HNOI2017 礼物
查看>>
HDU 1269 裸奔的强联通分量
查看>>
[推荐]WebService开发知识介绍
查看>>
centos6.8下安装dc2012
查看>>
javascript设计模式之发布订阅模式
查看>>
读《突然就走到了西藏》 | 保持呼吸,继续向前
查看>>
微软SQLHelper.cs类 中文版
查看>>
css字体及css文本控制
查看>>
ziplist之详细分析
查看>>
注册表
查看>>