1380 没有上司的舞会

来源:互联网 发布:select标签默认选中js 编辑:程序博客网 时间:2024/06/06 13:24
#include<iostream>#include<string.h>#include<cstdlib>#include<algorithm>using namespace std;int f[2][6010] , ch[6010][6010] , v[6010];int search(bool sel,int n){if(f[sel][n]) return f[sel][n];        if(!ch[n][0]) return sel ? v[n] : 0;        //如果没有下属了,返回相应选或不选的快乐指数,(快1ms。。。(其实可能不必这么纠结于这1ms))        int i,j;int tmp = (sel == 1) ? v[n] : 0;if(sel){for(i = 1; i <= ch[n][0]; i++)    {tmp += search(0,ch[n][i]);    }}else{for(i = 1; i <= ch[n][0]; i++){tmp += max(search(0,ch[n][i]) , search(1,ch[n][i]));}}return f[sel][n] = tmp;}int main(){int *fa;fa = (int*)malloc(sizeof(int)*6010);memset(f,0,sizeof(f));int n,i,j,k = 1;cin>>n;for(i = 1; i <= n; i++){cin>>v[i];}for(i = 1; i < n; i++){int p,c;cin>>c>>p;fa[c] = p;ch[p][++ch[p][0]] = c;}while(fa[k] != 0) k = fa[k];     //从root开始free(fa);cout<<max(search(0,k) , search(1,k))<<endl;}


其他都还好,最主要是 注意是从root节点开始(即 最大上司 开始)

用了12mb左右。。待优化


***************************************************************************************可供吐槽

0 0
原创粉丝点击