做题记录 Luogu P1352

Luogu P1352 没有上司的舞会

树形 dp 模板题。

真的好像所有 dp 都可以写记忆化搜索(yyds!

#include<bits/stdc++.h>
using namespace std;
#define N 100005
int f[N][2], first[N], Next[N], to[N], h[N], vis[N], tot, n;
void add(int x, int y)
{
	Next[++tot] = first[x];
	first[x] = tot;
	to[tot] = y;
	return;
}
void dp(int u)
{
	if(vis[u])
	{
		return;
	}
	vis[u] = 1;
	for(int i = first[u]; i; i = Next[i])
	{
		int v = to[i];
		if(vis[v])
		{
			continue;
		}
		dp(v);
		f[u][0] += max(f[v][0], f[v][1]);
		f[u][1] += f[v][0];
	}
	return;
}
int main()
{
	ios::sync_with_stdio(false);
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> f[i][1];
	}
	int u, v;
	for(int i = 1; i <= n - 1; i++)
	{
		cin >> u >> v;
		add(v, u);
		h[u] = 1;
	}
	for(int i = 1; i <= n; i++)
	{
		if(!h[i])
		{
			dp(i);
			cout << max(f[i][0], f[i][1]) << endl;
		}
	}
	return 0;
}
上一篇:2019.7.14 义乌模拟赛 T3 set


下一篇:jzoj7175-[2021.07.14NOI模拟]种蘑菇(mushroom)【莫比乌斯反演,树形dp】