luogu p1268 树的重量——构造,真正考验编程能力
题目链接:http://www.luogu.org/problem/show?pid=1268#sub
这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题目,没有打答案之间的换行,wa了好几次
解决所有“构造”问题都要按照如下的步骤:
- 寻找特例、特征
- 建立模型
- 一般化模型
寻找特例
(1) 我们假设结点数为1,显然答案为0,因为这棵树的边集为空。
(2) 当结点数为2时,答案就是d[1][2],即(1,2)的距离。
(3) 当结点数为3时呢?明显(1,3)和(2,3)这两条边有重叠的部分,那重叠的部分是几呢?
如图所示,(1,3)和(2,3)的重叠部分,记作l,其值为$(8+9-5)/2=6。建立模型
还是结点数为3的情况,这次把d[1][2],d[1][3],d[2][3]分别设为x,y,z,那么(1,3)和(1,2)的“重叠”部分就应该是\((y+z-x)/2\)一般化模型
如果结点数为四呢?
如图,只要求出红色的部分就可以了。
至于红色的部分怎么求,详细请见代码,在这里[^http://blog.sina.com.cn/s/blog_610128b00100dsic.html]解释得很详细了
//自己选择的路就算跪着也要走完 系列
//题目:P1268
#include <iostream>
#include <cstring>
using namespace std;
const int maxn=35;
int n,a[maxn][maxn]={0};
int main(){
while (cin>>n,n!=0){
memset(a,0,sizeof(a));
for (int i=1;i<=n;i++)
for (int j=i+1;j<=n;j++)
cin>>a[i][j],a[j][i]=a[i][j];
int ans=a[1][2];
for (int i=3;i<=n;i++){
int min=0x3f3f3f3f;
for (int j=2;j<i;j++){
int x=a[1][j],y=a[1][i],z=a[i][j],xyz=(y+z-x)/2;
min=min>xyz?xyz:min;
}
ans+=min;
}
cout<<ans<<endl;
}
return 0;
}
luogu p1268 树的重量——构造,真正考验编程能力的更多相关文章
- [Luogu P1268] 树的重量 (巧妙的构造题)
题面 传送门:https://www.luogu.org/problemnew/show/P1268 Solution 这是一道极其巧妙的构造题 先做一个约定[i,j]表示从i到j的距离 我们可以先从 ...
- 【luogu P1268 树的重量】 题解
题目链接:https://www.luogu.org/problemnew/show/P1268 给定所有点间的最短路求原图所有路径和 形如: 我们需要计算红边+绿边 绿边 = (红边+蓝边+紫边)/ ...
- luogu P1268 树的重量
一开始把这题想复杂了,,, 这里记\(di[i][j]\)表示\(i\)到\(j\)的距离 首先如果\(n=2\),答案显然为\(di[1][2]\) 如果\(n=3\) 懒得画图了盗图过来 那么3号 ...
- 洛谷—— P1268 树的重量
P1268 树的重量 构造类题目,看不出个所以然来... emmm,只好看题解: 只有两个点,那一条路径就是$ans$ 考虑三个点,那么$3$这个点相对于树上的路径(已经加入树上的边的距离) 为:$( ...
- 洛谷P1268 树的重量
P1268 树的重量 85通过 141提交 题目提供者该用户不存在 标签树形结构 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 有这种情况吗!!!! 题意似乎有问题 题目描述 树可以用来表 ...
- 洛谷 P1268 树的重量 解题报告
P1268 树的重量 题目描述 树可以用来表示物种之间的进化关系.一棵"进化树"是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题 ...
- 洛谷P1268 树的重量 【构造 + 枚举】
题目描述 树可以用来表示物种之间的进化关系.一棵"进化树"是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题是,根据物种之间的距离 ...
- P1268 树的重量【构造】
题目描述 树可以用来表示物种之间的进化关系.一棵“进化树”是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题是,根据物种之间的距离,重构相应的“进化树 ...
- P1268 树的重量
题目描述 树可以用来表示物种之间的进化关系.一棵“进化树”是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题是,根据物种之间的距离,重构相应的“进化树 ...
随机推荐
- HTML DOM 对象简单介绍
文档对象模型(Document Object Model,DOM)是DHTML的基础. 常用对象:1)window对象:表示对象浏览器窗口(选项卡)对象.2)document对象:代表整个网页,是客户 ...
- C++中extern关键字用法小结
总结C++中关于extern关键字的用法. 1.变量的生明和定义中 C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译.为了将程序分为许多文件,则需要在文件中共享代码 ...
- iOS常用第三方框架大全
常用第三方 今天就给大家总结一下,我们在项目中用到最多的第三方,免去了大家花时间去搜索,在这里大家进行了全面的总结. 1. 编程框架 1:基于响应式编程思想的oc 地址:https://github. ...
- MacOS清除管理员密码
1.重启 mac ,按住 Command + s 键,进入当用户模式,直达出现黑底白字的屏幕,再松开.输入(重新挂载根文件系统为可读写):mount -uw / 2.然后输入:rm /var/db/. ...
- DIOCP之开发流程图之Server
server开发流程图 暂时没有找到好的流程图绘制软件,就用画图来做的,比较乱,太慢了
- javascript 中的继承实现, call,apply,prototype,构造函数
javascript中继承可以通过call.apply.protoperty实现 1.call call的含义: foo.call(thisObject, args...) 表示函数foo调用的时候, ...
- 转 夕甲甲:孔乙己之 C++ 版
欧欧匹代码的格局,是和别的编程模式不同的:首先要有一个构造函数:基类里只定义了函数的形式,可以随时通过派生增加不同的实现.那些程序员们,每每学会了继承和多态,便可以接一个项目,——这是十年前的事,现在 ...
- 遗传算法之GAUL
遗传算法之GAUL简介 简介 GAUL(遗传算法工具库的简称) GAUL is an open source programming library, released under th ...
- Windows上Python2和3如何兼容
作者:匿名用户链接:https://www.zhihu.com/question/21653286/answer/95532074来源:知乎著作权归作者所有,转载请联系作者获得授权.想学习Python ...
- target="_blank"
target="_blank":出现在<a target="_blank" href="http://">中,在开发中,在一个系 ...