坪山建设网站,网站建设与维护 实训,住建部网站统计城乡建设统计信息系统登录,著名品牌展厅设计正题 题目大意
一棵树有nnn个叶子节点#xff0c;给出每两个叶子节点之间的距离。求这棵树的边权之和。 解题思路
我们考虑每次加入一个节点。两个节点时不用说。 加入第三个节点时#xff0c;肯定是加入在节点1和节点2之间。
之后我们开始推导#xff1a;当我们加入节点…正题 题目大意
一棵树有nnn个叶子节点给出每两个叶子节点之间的距离。求这棵树的边权之和。 解题思路
我们考虑每次加入一个节点。两个节点时不用说。 加入第三个节点时肯定是加入在节点1和节点2之间。
之后我们开始推导当我们加入节点nnn时我们可以考虑加入在1∼x(x∈[2..n−1])1\sim x(x\in [2..n-1])1∼x(x∈[2..n−1])之间。
为什么一定是从1开始我们考虑是否有可能加入在x∼yx\sim yx∼y的路径直接其实没有必要因为如果加入在这两个点之间那么考虑加入到1∼x1\sim x1∼x和1∼y1\sim y1∼y的结果是一样的。所以之间起点定义为111就好了。 codecodecode
#includecstdio
#includealgorithm
using namespace std;
int n,a[50][50],ans;
int main()
{while(1){scanf(%d,n);if(!n) break;for(int i1;in;i)for(int ji1;jn;j)scanf(%d,a[i][j]),a[j][i]a[i][j];ansa[1][2];for(int i3;in;i){int len2147483647;for(int j2;ji;j)lenmin(len,(a[1][i]a[j][i]-a[1][j])/2);anslen;}printf(%d\n,ans);}
}