题目:
给出一个树,计算每个节点到其他节点的通讯代价的总和,假如树为
1————2————3
1
则结点 1,2,3 通讯代价分别为:3,2,3
例:
输入:
3
1 2
2 3
输出:
3 2 3
输入说明: 3,表示共有 3 个结点,接下来的两行,表示该树节点之间的相连情
况
- 思路分析
输入n,表示有n个数字,存储到一个数组中,观察不为0的点,即可知道是哪几个位置,然后计算两两差值的和,即为该点的输出值
注意输入的个数是有规律的
主要是计算两两差值的绝对值的和 - 完整代码
#include<iostream>
#include<cmath>
using namespace std;
int main(){int n;cin>>n;int i,j;int b[20]={0};for(i=1;i<=2*(n-1);i++){ //规律,n个数有2(n-1)个输入 int t;cin>>t;b[t]++;}int cnt=0; //记录输出个数 for(i=1;i<20;i++){int sum=0; //记录某点到其他各点的距离和 if(b[i]){for(j=1;j<20;j++){if(b[j])sum+=abs(j-i);}cnt++; cout<<sum;if(cnt!=n)cout<<" "; } }return 0;
}
- 除了给的测试用例,还可以试一下下面的,运行正确