注意是否是在查找更新祖先并计算当前点到队伍第一个的距离时,是先递归再更新
int find(int x){ if(f[x]==x) return f[x]; int k=find(f[x]); dis[x]+=dis[f[x]]; return f[x]=k; }
而不是
int find(int x){ if(f[x]==x) return f[x]; dis[x]+=dis[f[x]]; return f[x]=find(f[x]); }
因为这个值需要依靠他父亲节点的值需要先算父亲节点的