#include#include #include using namespace std;int n,head[2005],dp[2005][3],fa[2005],w[2005],cnt;struct edge{ int v,next;}e[2005];inline void add(int u,int v){ e[++cnt].v=v; e[cnt].next=head[u]; head[u]=cnt;}inline int root(int v){ if(fa[v]==-1)return v; return root(fa[v]);}//0:自无,父有 1:自有 2:自无父无,子有的有 inline void guess(int u){ int minn=2147483647,k=0; for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].v; guess(v); dp[u][1]+=min(dp[v][0],dp[v][1]); dp[u][0]+=min(dp[v][1],dp[v][2]); if(dp[v][1]