社区讨论

60分求助orz

P1352没有上司的舞会参与者 2已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mi7z46wp
此快照首次捕获于
2025/11/21 05:58
4 个月前
此快照最后确认于
2025/11/21 05:58
4 个月前
查看原帖
CPP
#include<cstdio>
#include<iostream>

int n,r[6010],first[6010]={0},ans,root,rudu[6010];

struct edge{
	int v,next;
}e[6010];

int cnt=0;
inline void addedge(int u,int v){
	e[++cnt].v=v;e[cnt].next=first[u];first[u]=cnt;
}

int max(int x,int y){
	return x>y?x:y;
}

int f[6010][2];
void dp(int x){
	f[x][0]=0;
	f[x][1]=r[x];
	for(int i=first[x];i;i=e[i].next){
		int v=e[x].v;
		dp(v);
		f[x][0]+=max(f[v][0],f[v][1]);
		f[x][1]+=f[v][0];
	}
}

int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&r[i]);
	}
	int l,k;
	for(int i=1;i<n;i++){
		scanf("%d%d",&l,&k);
		addedge(k,l);
		rudu[l]=1;
	}
	for(int i=1;i<=n;i++){
		if(!rudu[i]){
			root=i;break;
		}
	}
	dp(root);
	printf("%d",max(f[root][0],f[root][1]));
	return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...