LOJ #10156. 「一本通 5.2 例 4」战略游戏

无聊傻逼题???一开始被坑???
原来是所有边都要被看到,写成了所有点都要被看到。那不更简单???
感觉这个类型的树形dp比树上背包好理解。
#include <bits/stdc++.h>
using namespace std;
const int N=1505;
int n,x,u,v;
int f[N][2];
int cnt,head[N];
struct edge{int next,to;}e[N<<1];
inline void add(int u,int v)
{
	cnt++;
	e[cnt].next=head[u];
	e[cnt].to=v;
	head[u]=cnt;
}

void dfs(int u,int fa)
{
	f[u][1]=1;
	for (register int i=head[u]; i; i=e[i].next)
	if (e[i].to!=fa)
	{
		dfs(e[i].to,u);
		f[u][0]+=f[e[i].to][1];;
		f[u][1]+=min(f[e[i].to][0],f[e[i].to][1]);
	}
}

int main(){
	scanf("%d",&n);
	for (register int i=1; i<=n; ++i)
	{
		scanf("%d%d",&u,&x);
		u++;
		while (x--) scanf("%d",&v),v++,add(u,v),add(v,u);	
	}
	dfs(1,0);
	printf("%d\n",min(f[1][0],f[1][1]));
return 0;
}
发布了64 篇原创文章 · 获赞 29 · 访问量 682

猜你喜欢

转载自blog.csdn.net/Dove_xyh/article/details/103859411
今日推荐