比赛 20200109 评测结果 AAAAAAAAAA
题目名称 猴腮雷 最终得分 100
用户昵称 ShallowDream雨梨 运行时间 0.017 s
代码语言 C++ 内存使用 13.80 MiB
提交时间 2019-12-25 19:27:39
显示代码纯文本
    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=6004;
    int head[maxn],tot,flag,qwq[maxn],dp[maxn][2];
    struct edge{int to,next;
    }a[maxn];
    void add(int x,int y){
    	tot++;
    	a[tot].to=y;
    	a[tot].next=head[x];
    	head[x]=tot;}
    bool vis[maxn];
    void s(int x){
    	dp[x][1]=qwq[x];
    	for(int i=head[x];i;i=a[i].next){
    		int p=a[i].to;
    	s(p);
    	dp[x][0]+=max(dp[p][0],dp[p][1]);
    	dp[x][1]+=dp[p][0];
    	}}
     
     
    int main(){
     	 freopen("monk.in","r",stdin);
    	freopen("monk.out","w",stdout);
    	ios::sync_with_stdio(false);
       int n;cin>>n;
       for(int i=1;i<=n;i++)
    	cin>>qwq[i];
    	int q,w;
    	for(int i=1;i<n;i++){
    	cin>>q>>w;
    	add(w,q);
    	vis[q]=1;
    	}
    	cin>>q>>w;
    	for(int i=1;i<=n;i++)
    	if(vis[i]==0){flag=i;
    		break;}
    	s(flag);
    		
    		cout<<max(dp[flag][0],dp[flag][1]);
    		
    	return 0;}