与 [USACO08JAN]Cell Phone Network G 一样,只是每个节点的权值不一样。
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#include<bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> pii;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const double eps = 1e-5;
const int N = 2e4 + 10;
const int mod = 10007;
int dp[N][3],w[N];
int ne[N],e[N],h[N],idx=1;
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,int fa){
dp[u][0] = w[u];
int mi = 1e9;
for(int i=h[u];i;i=ne[i]){
int j = e[i];
if(j == fa) continue;
dfs(j,u);
dp[u][0] += min(min(dp[j][0],dp[j][1]),dp[j][2]);
dp[u][2] += min(dp[j][0],dp[j][1]);
if(dp[j][0] - min(dp[j][0],dp[j][1]) < mi) mi = dp[j][0] - min(dp[j][0],dp[j][1]);
}
dp[u][1] = mi + dp[u][2];
}
signed main(){
IOS
int n; cin>>n;
for(int i=1;i<=n;i++){
int a; cin>>a;
cin>>w[a];
int k; cin>>k;
for(int j=1;j<=k;j++){
int b; cin>>b;
add(a,b);add(b,a);
}
}
dfs(1,0);
cout<<min(dp[1][0],dp[1][1])<<endl;
return 0;
}