#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){f=ch=='-'?-f:f;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
const int N=200005;
//son 必须最后选
int n,h[N],ne[N<<1],t[N<<1],T,dep[N],cnt,siz[N],sum[N],a[N],son[N],Dep[N],ans;
vector<int>p[N];
void asd(int x,int y){
t[++cnt]=y;
ne[cnt]=h[x];
h[x]=cnt;
}
void dfs(int u,int fa){
siz[u]=1;
sum[u]=a[u];
dep[u]=dep[fa]+1;
Dep[u]=dep[u];
for(int e=h[u];e;e=ne[e]){
if(t[e]==fa)continue;
dfs(t[e],u);
siz[u]+=siz[t[e]];
sum[u]+=sum[t[e]];
Dep[u]=max(Dep[u],Dep[t[e]]);
if(T==1){
if(Dep[t[e]]>Dep[son[u]])son[u]=t[e];
else if(Dep[t[e]]==Dep[son[u]]&&siz[t[e]]*sum[son[u]]>siz[son[u]]*sum[t[e]])son[u]=t[e];
}
}
}
bool cmp(int i,int j){
return siz[j]*sum[i]>siz[i]*sum[j];
}
void dfs2(int u,int fa,int tim){
// printf("%lld\n",u);
ans+=tim*a[u];
for(int e=h[u];e;e=ne[e])if(t[e]!=fa)p[u].push_back(t[e]);
sort(p[u].begin(),p[u].end(),cmp);
int l=p[u].size();
for(int i=0;i<l;++i){
if(son[u]!=p[u][i]){
dfs2(p[u][i],u,tim+1);
tim+=siz[p[u][i]]*2;
}
}
if(T==1&&son[u]){//son u
dfs2(son[u],u,tim+1);
tim+=siz[son[u]];
}
}
signed main(){
n=read();T=read();
for(int i=2;i<=n;++i){
int x;
x=read();a[i]=read();
asd(i,x);asd(x,i);
}
dep[0]=-1;
dfs(1,0);
if(T==1)cout<<(n<<1ll)-Dep[1]-2<<' ';
else cout<<(n<<1ll)-2<<' ';
// printf("big son is %lld\n",son[3]);
dfs2(1,0,0);
cout<<ans;
}
码风“优良”