题目链接:http://www.luogu.org/problem/show?pid=1268#sub



这道题费了我不少心思= =其实思路和标称毫无差别,但是由于不习惯ACM风格的题目,没有打答案之间的换行,wa了好几次

解决所有“构造”问题都要按照如下的步骤:

  1. 寻找特例、特征
  2. 建立模型
  3. 一般化模型
  • 寻找特例

    (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 树的重量——构造,真正考验编程能力的更多相关文章

  1. [Luogu P1268] 树的重量 (巧妙的构造题)

    题面 传送门:https://www.luogu.org/problemnew/show/P1268 Solution 这是一道极其巧妙的构造题 先做一个约定[i,j]表示从i到j的距离 我们可以先从 ...

  2. 【luogu P1268 树的重量】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1268 给定所有点间的最短路求原图所有路径和 形如: 我们需要计算红边+绿边 绿边 = (红边+蓝边+紫边)/ ...

  3. luogu P1268 树的重量

    一开始把这题想复杂了,,, 这里记\(di[i][j]\)表示\(i\)到\(j\)的距离 首先如果\(n=2\),答案显然为\(di[1][2]\) 如果\(n=3\) 懒得画图了盗图过来 那么3号 ...

  4. 洛谷—— P1268 树的重量

    P1268 树的重量 构造类题目,看不出个所以然来... emmm,只好看题解: 只有两个点,那一条路径就是$ans$ 考虑三个点,那么$3$这个点相对于树上的路径(已经加入树上的边的距离) 为:$( ...

  5. 洛谷P1268 树的重量

    P1268 树的重量 85通过 141提交 题目提供者该用户不存在 标签树形结构 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 有这种情况吗!!!! 题意似乎有问题 题目描述 树可以用来表 ...

  6. 洛谷 P1268 树的重量 解题报告

    P1268 树的重量 题目描述 树可以用来表示物种之间的进化关系.一棵"进化树"是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题 ...

  7. 洛谷P1268 树的重量 【构造 + 枚举】

    题目描述 树可以用来表示物种之间的进化关系.一棵"进化树"是一个带边权的树,其叶节点表示一个物种,两个叶节点之间的距离表示两个物种的差异.现在,一个重要的问题是,根据物种之间的距离 ...

  8. P1268 树的重量【构造】

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

  9. P1268 树的重量

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

随机推荐

  1. ng-style 的坑 - 对性能的影响

    本文地址:http://www.cnblogs.com/jying/p/5633203.html 熟悉 angular 的前端对ng-style 一定不陌生,这个家伙可以绑定一个函数,使得我们可以在函 ...

  2. Tomcat安装及配置教程

    工具/原料 Tomcat7.0 eclipse 百度经验:jingyan.baidu.com java环境的配置 1 java环境的配置应该都学过吧,这里简单的讲一下. 下载安装java JDK,注意 ...

  3. EBS 消息总线

    http://www.ibm.com/developerworks/cn/webservices/ws-whyesb/ 开发人员为何需要企业服务总线? 本文不仅仅是为架构师准备的:使用企业服务总线 ( ...

  4. Android_AsyncTask异步任务机制

    今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...

  5. <一>Angular.js学习

    angular.module(name, [a], [b]);  // angular.module()创建.获取.注册angular中的模块 name:字符串类型,代表模块的名称: a:字符串的数组 ...

  6. matlab计算差分函数diff

    A = 3 2 5 6 5 2 1 8 4 2 7 9 >> diff(A,1,1) ans = 2 0 -4 2 -1 0 6 1 >> diff(A,1,2) ans = ...

  7. exception 'DOMException' with message 'Invalid Character Error' Php + Mongodb

    问题描述: 项目属于MVC设计模式,技术和框架采用了php5.6 + Yii2.0 + MongoDB. 在我从Controller中调用Model 的 findAll([]) 方法获取数据打印到屏幕 ...

  8. Java基础知识系列——文件操作

    对文件进行操作在编程中比较少用,但是我最近有一个任务需要用到对文件操作. 对文件有如下操作形式: 1.创建新的文件(夹) File fileName = new File("C:/myfil ...

  9. 什么是遗传方差(Genetic variance)、加性遗传方差(Additive genetic variance)、显性遗传方差(Dominance genetic variance)、上位遗传方差(Epistatic genetic variance)

    遗传方差:遗传方差又称表型方差(phenotypic variance),通常结合基因型方差(genotype variance)和环境方差(environmental variance).遗传方差主 ...

  10. win10使用小技巧以及常见问题处理方案

    1.win10开机一直处于黑屏状态或者反复重启怎么处理? 处理小方法:开机按win+X组合件进入高级修复模式---选择修复开启模式---f4进入安全模式开机状态---管理控制面板---禁用或者卸载显卡 ...