#include #include #include using namespace std; typedef long long ll; void dfs( vector> &children, int node, vector & height, vector &leaf ) { if( children[node].size()==0) { height[node] = 0; leaf[node] = node; return; } for( int i = 0; i < children[node].size(); i++ ) dfs( children, children[node][i], height, leaf); for( int i = 0; i < children[node].size(); i++ ) { if( height[children[node][i]] > height[node] ) { height[node] = height[children[node][i]]; leaf[node] = leaf[children[node][i]]; } } height[node]++; } int main() { int n,k; cin >> n >> k; vector a(k); for( int i =0;i> a[i]; vector> children(n, vector()); for( int i = 1; i <= n-1; i++ ) { int tmp; cin >> tmp; children[tmp].push_back(i); } vector height(n, -1); vector leaf(n,-1); dfs( children, 0, height, leaf); vector lc(n,0); for( int i = 0; i < n; i++ ) { lc[leaf[i]]++; } sort(a.begin(), a.end()); sort(lc.begin(), lc.end()); ll sm = -a[k-1]; for( int i = 0; i < k; i++ ) { sm += a[i] * lc[n-k+i]; } cout << sm << endl; return 0; }