#pragma GCC optimize(2)
#include<vector>
#include<cstdio>
using namespace std;
typedef long long ll;
const int maxn = 1500+5;
int Case = 1, dp[maxn][2], n;
vector<int>ve[maxn];
int in[maxn];
void dfs(int u) {
for(int i = 0; i < ve[u].size(); i++) {
dfs(ve[u][i]);
}
for(int i = 0; i < ve[u].size(); i++) {
dp[u][0] += dp[ve[u][i]][1];
dp[u][1] += min(dp[ve[u][i]][1], dp[ve[u][i]][0]);
}
}
void solve() {
for(int i = 0; i < n; i++) {
dp[i][1] = 1;dp[i][0] = 0;
ve[i].clear();in[i] = 0;
}
for(int i = 0; i < n; i++) {
int id, x;
scanf("%d:(%d)", &id, &x);
//printf("id = %d x = %d\n", id, x);
for(int i = 1; i <= x; i++) {
int t;scanf("%d", &t);
in[t]++;
ve[id].push_back(t);
}
}
for(int i = 0; i < n; i++) {
if(!in[i]) {
dfs(i);
printf("%d\n", min(dp[i][1], dp[i][0]));
return;
}
}
return;
}
int main() {
while(scanf("%d", &n) == 1) {
solve();
}
return 0;
}
树形dp模板poj1463
最新推荐文章于 2023-08-14 15:43:30 发布