你可能没有完全清空虚数。因为每次 dp 时清空必须要到达每个节点。
int dp(int x,int now){
int ans=0;
for(auto &[i,w]:ve[x]) if(t[i]==now) ans+=w;
else ans+=min(w,dp(i,now));
ve[x].clear();
return ans;
}
应改成
int dp(int x,int now){
int ans=0;
for(auto &[i,w]:ve[x]){
int tmp=dp(i,now);
if(t[i]==now) ans+=w;
else ans+=min(w,tmp);
}
ve[x].clear();
return ans;
}