#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
const ll N=2e5+10;
ll n,T;
ll to[N<<1],tt,nt[N<<1],hd[N], dep[N];
ll sz[N],dp[N],sum[N], gg[N];
ll fa[N],a[N];
void push(ll u,ll v){
to[++tt]=v;
nt[tt]=hd[u];
hd[u]=tt;
}
vector<ll> tmp;
bool cmp(ll a, ll b) {
int u = a, v = b;
return sz[u]*sum[v]<sz[v]*sum[u];
}
int smsm[N], smsz[N];
void dfs(ll nw){
int v=a[nw];
sz[nw]=1;
sum[nw]=a[nw];
for(int i=hd[nw];i;i=nt[i]){
dfs(to[i]);
dep[nw]=max(dep[nw],dep[to[i]]);
sz[nw]+=sz[to[i]];
sum[nw]+=sum[to[i]];
}
dep[nw]++;
tmp.clear();
for(int i=hd[nw];i;i=nt[i])
tmp.push_back(to[i]);
sort(tmp.begin(),tmp.end(),cmp);
ll p=1,ans = 1e18,maxdep = 0;
for(int i=0;i<tmp.size();i++){
ll v=tmp[i];
maxdep = max(maxdep,dep[v]);
dp[nw]+=p*sum[v]+dp[v];
p+=sz[v]*2;
smsz[i] = p;
smsm[i] = smsm[i-1] + sum[v];
}
for(int i=0;i<tmp.size();i++){
ll v=tmp[i];
if(dep[v] != maxdep) continue;
ans = min(ans,
dp[nw]
- dp[v] - (i?smsz[i-1]:1)*sum[v]
- sz[v]*2*(smsm[tmp.size()-1] - smsm[i])
+ gg[v] + (smsz[tmp.size()-1] - 2*sz[v]) * sum[v]
);
}
gg[nw] = ans;
if(tmp.size() == 0) gg[nw] = 0;
}
signed main(){
scanf("%lld %lld",&n,&T);
for(int i=2;i<=n;i++){
scanf("%lld %lld",&fa[i],&a[i]);
push(fa[i],i);
}
dfs(1);
printf("%lld %lld\n",sz[1]*2-2-(T==0?0:dep[1]-1),(T==0?dp[1]:gg[1]));
return 0;
}
T=1,全错了 调抑郁了/kel