#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
int n,t,a[200005],sz[200005],d[200005],maxd[200005];
long long sum[200005],f[200005],g[200005],S[200005],F[200005];
vector<int> e[200005];
struct node
{
long long sum,sz,id;
}tmp[200005];
int tot;
bool cmp(node a,node b)
{
return 2*a.sz*b.sum<=2*b.sz*a.sum;
}
void dfs(int u,int fa)
{
sz[u]=1;
d[u]=d[fa]+1;
maxd[u]=d[u];
sum[u]=a[u];
if(e[u].size()==1)
{
f[u]=g[u]=0;
return;
}
for(int v:e[u])
{
if(v==fa)
continue;
dfs(v,u);
sum[u]+=sum[v];
sz[u]+=sz[v];
maxd[u]=max(maxd[u],maxd[v]);
}
tot=0;
for(int v:e[u])
{
if(v==fa)
continue;
tmp[++tot]=(node){sum[v],sz[v],v};
}
sort(tmp+1,tmp+tot+1,cmp);
long long ti=0;
S[tot+1]=F[tot+1]=0;
for(int i=tot;i>=1;i--)
{
int v=tmp[i].id;
S[i]=S[i+1]+sum[v];
F[i]=F[i+1]+sum[v]+f[v]+2*sz[v]*S[i+1];
}
for(int i=1;i<=tot;i++)
{
int v=tmp[i].id;
if(maxd[u]==maxd[v])
{
g[u]=min(g[u],f[u]+ti*S[i+1]+F[i+1]+((sz[u]-sz[v]-1)*2+1)*sum[v]+g[v]);
}
f[u]+=(ti+1)*sum[v]+f[v];
ti+=sz[v]*2;
}
}
int main()
{
cin>>n>>t;
for(int i=2;i<=n;i++)
{
int p;
cin>>p>>a[i];
e[i].push_back(p);
e[p].push_back(i);
}
d[0]=-1;
memset(g,0x3f,sizeof(g));
dfs(1,0);
if(t==0)
cout<<2*n-2<<" "<<f[1];
else
cout<<2*n-2-maxd[1]<<" "<<g[1];
return 0;
}
记录