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 树的重量
题目描述 树可以用来表示物种之间的进化关系.一棵“进化树”是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题是,根据物种之间的距离,重构相应的“进化树 ...
随机推荐
- 移动端click事件延迟300ms的原因以及解决办法
这要追溯至 2007 年初.苹果公司在发布首款 iPhone 前夕,遇到一个问题 —— 当时的网站都是为大屏幕设备所设计的.于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点 ...
- Ternary Search Trees 三分搜索树
经常碰到要存一堆的string, 这个时候可以用hash tables, 虽然hash tables 查找很快,但是hash tables不能表现出字符串之间的联系.可以用binary search ...
- json文本装换为JSONArray
package com.beijxing.TestMain; import java.io.File; import java.io.IOException; import org.apache.co ...
- msdn webcast 下载地址整理
http://blog.csdn.net/he_8134/article/details/2069194
- centos7 install 安装mysql
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -ivh mysql-community- ...
- 使用新浪云 Java 环境搭建一个简单的微信处理后台
前一段时间,写了一篇在新浪云上搭建自己的网站的教程,通过简单构建了一个 maven 的项目,展示部署的整个流程,具体的操作可以参看这里. 新浪云服务器除了可以搭建自己的网站以外,也非常的适合作为微信公 ...
- java的Map及Map.Entry解析
Map<K,V>是以键-值对存储的(key-value), 而Entry<K,V>是Map中的一个接口,Map.Entry<K,V>接口主要用于获取.比较 key和 ...
- Activity之间传递参数(二)
------siwuxie095 传递数据包 1.传递数据包要用到Bundle,MainActivity.java中: package com.siwuxie095.sendargs; import ...
- JS中变量名作为if条件的 true/flase
在Javascript中,可以直接将变量名放到if条件中, var a;//甚至不定义 if (a){ //... } 以下情况被认为是flase: 1.''空的字符串 2.数字0 3.对象null ...
- generator class 的含义
native有天生的,本土的,也就是说生来就有的, 那也就是说自动生成,不需要人工来帮忙或者管控的. 而assigned是指指定的,分配的, 如果你不赋予他甚麼东西,那麼他是不能实现的. 需要人工,自 ...