MnZn求助
  • 板块学术版
  • 楼主ZHUHK
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/1/29 23:32
  • 上次更新2023/10/28 10:05:28
查看原帖
MnZn求助
304458
ZHUHK楼主2022/1/29 23:32

只有20分,不知道为什么

#include<bits/stdc++.h>
using namespace std;

const int N=1e4+10;
struct Node
{
	int sum,child[1500],pri;
}node[N];
int f[N][3];
int n;
int root;
int a[N];

void dp(int x)
{
	f[x][1]=node[x].pri ;
	f[x][0]=0;
	if(node[x].sum==0) return ;
	for(int i=1;i<=node[x].sum;i++)
	{
		int v=node[x].child[i];
		dp(v);;
		f[x][0]+=f[v][1];
		f[x][1]+=min(f[v][0],f[v][1]);
	}
} 
int main()
{
	memset(a,0,sizeof(a));
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int id;
		cin>>id;
		scanf("%d",&node[id].pri);
		scanf("%d",&node[id].sum );
		for(int j=1;j<=node[id].sum;j++)
		{
			scanf("%d",&node[id].child[j]);
			a[node[id].child[j]]=1;
		}
	} 
	root=1;
	while(a[root]) root++;
	dp(root);
	printf("%d",min(f[root][1],f[root][0]));
	return 0;
}
2022/1/29 23:32
加载中...