P1268 树的重量

题目描述

树可以用来表示物种之间的进化关系。一棵“进化树”是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异。现在,一个重要的问题是,根据物种之间的距离,重构相应的“进化树”。

令N={1..n},用一个N上的矩阵M来定义树T。其中,矩阵M满足:对于任意的i,j,k,有M[i,j] + M[j,k] >= M[i,k]。树T满足:

1.叶节点属于集合N;

2.边权均为非负整数;

3.dT(i,j)=M[i,j],其中dT(i,j)表示树上i到j的最短路径长度。

如下图,矩阵M描述了一棵树。

树的重量是指树上所有边权之和。对于任意给出的合法矩阵M,它所能表示树的重量是惟一确定的,不可能找到两棵不同重量的树,它们都符合矩阵M。你的任务就是,根据给出的矩阵M,计算M所表示树的重量。下图是上面给出的矩阵M所能表示的一棵树,这棵树的总重量为15。

输入输出格式

输入格式:

输入数据包含若干组数据。每组数据的第一行是一个整数n(2<n<30)。其后n-1行,给出的是矩阵M的一个上三角(不包含对角线),矩阵中所有元素是不超过100的非负整数。输入数据保证合法。

输入数据以n=0结尾。

输出格式:

对于每组输入,输出一行,一个整数,表示树的重量。


我已经蠢到看了题解还傻了无敌久才弄懂了。

考虑2个点时,我们加入的一条边可以直接被统计上。

第3个点时,我们并不关系它加在1,2点的边上的哪里,但我们只能加在这条边上并且唯一确定多出来的那条边的权值

如下图,权值为

\((dis_{1,3}+dis_{2,3}-dis_{1,2})/2\)

在加入第四个点时,我们就需要决策一下到底是加在链1,2上呢?还是链1,3上呢

答案是加入新产生的权值最小的那条边

为什么呢?

因为如果不是最小的,那条红色的链就统计重复了。


Code:

#include <cstdio>
const int N=32;
int min(int x,int y){return x<y?x:y;}
int dis[N][N],n;
int main()
{
while(scanf("%d",&n)&&n)
{
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
{
scanf("%d",&dis[i][j]);
dis[j][i]=dis[i][j];
}
int ans=dis[1][2];
for(int i=3;i<=n;i++)
{
int mi=0x7fffffff;
for(int j=2;j<i;j++)
mi=min(mi,dis[1][i]+dis[j][i]-dis[1][j]);
ans+=mi>>1;
}
printf("%d\n",ans);
}
return 0;
}

2018.8.9

最新文章

  1. ENode框架Conference案例分析系列之 - ENode框架初始化
  2. poj3461 字符串匹配 熟悉kmp算法第一题
  3. [Everyday Mathematics]20150222
  4. 最强Android模拟器genymotion的安装与配置
  5. C#百分比式布局
  6. CSS长度单位及区别 em ex px pt in
  7. D5
  8. codeforce Gym 101102A Coins (01背包变形)
  9. Tomcat的系统安全管理
  10. 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes
  11. ASP.NET MVC从空项目开始定制项目
  12. 关于pyCharm专业版的破解方法
  13. 自学Linux Shell13.3-获得用户输入(read命令)
  14. 联想 Lenovo PWR-G60 无线掌中宝拆机
  15. 【AtCoder】ARC093
  16. Lua------------------改善Unity编辑器对Lua文件的支持
  17. SQL执行计划分析2
  18. 设计模式之————依赖注入(Dependency Injection)与控制反转(Inversion of Controller)
  19. dos批处理知识
  20. 在Powerdesigner中创建概念数据模型

热门文章

  1. windows 下安装pyspider
  2. MySQL索引介绍
  3. ODBC error in PHP: “No tuples available at this result index”
  4. phpstorm代码提示不小心关了,如何开启
  5. Python基本数据类型(一)
  6. 【Java】关于Spring框架的总结 (三)
  7. 登録更新(BAPI)
  8. python的初体验
  9. C# static const和readonly区别
  10. 读取hbase数据到mysql