holiday/8.20/C.cpp

69 lines
961 B
C++
Raw Normal View History

2022-08-21 08:22:24 +08:00
#include<cstdio>
#include<vector>
using namespace std;
const int N=2e5+5,inf=0x3f3f3f3f;
int w[N],to[N],ne[N],h[N];
int cnt=0;
int n;
struct Node
{
int fa;
int sum;
int max;
int min;
int len;
// vector<int> son;
} a[N];
void add(int u,int v,int w1)
{
a[v].fa=u;
w[++cnt]=w1;
to[cnt]=v;
ne[cnt]=h[u];
h[u]=cnt;
}
void dfs(int u)
{
int v,vmax;
a[u].max=0;
a[u].min=inf;
a[u].len=0;
for(int i=h[u]; i; i=ne[i])
{
v=to[i];
dfs(v);
a[u].sum+=a[v].sum+w[i]*(a[v].len+1);
vmax=a[v].max+w[i];
a[u].max=a[u].max>vmax? a[u].max:vmax;
a[u].min=a[u].min<w[i]? a[u].min:w[i];
a[u].len+=a[v].len+1;
}
if(a[u].min==inf)
{
a[u].min=0;
}
// if(a[u].len==0)
// {
// a[u].len=1;
// }
}
void ce()
{
for(int i=1; i<=n; i++)
{
printf("%d:%d %d %d %d %d\n",i,a[i].fa ,a[i].max,a[i].min,a[i].sum,a[i].len );
}
}
int main()
{
int u,v,w1;
scanf("%d",&n);
for(int i=2; i<=n; i++)
{
scanf("%d%d",&u,&w1);
add(u,i,w1);
}
dfs(1);
ce();
}