新网站的宣传推广,简述网站开发的几个阶段,松原手机网站开发公司电话,wordpress蜘蛛插件题目
题目链接#xff1a;285.没有上司的舞会
Ural 大学有 N 名职员#xff0c;编号为 1∼N。
他们的关系就像一棵以校长为根的树#xff0c;父节点就是子节点的直接上司。
每个职员有一个快乐指数#xff0c;用整数 Hi 给出#xff0c;其中 1≤i≤N。
现在要召开一场…题目
题目链接285.没有上司的舞会
Ural 大学有 N 名职员编号为 1∼N。
他们的关系就像一棵以校长为根的树父节点就是子节点的直接上司。
每个职员有一个快乐指数用整数 Hi 给出其中 1≤i≤N。
现在要召开一场周年庆宴会不过没有职员愿意和直接上司一起参会。
在满足这个条件的前提下主办方希望邀请一部分职员参会使得所有参会职员的快乐指数总和最大求这个最大值。
输入格式
第一行一个整数 N。
接下来 N 行第 i 行表示 i 号职员的快乐指数 Hi。
接下来 N−1 行每行输入一对整数 L,K表示 K 是 L 的直接上司。注意一下后一个数是前一个数的父节点不要搞反。
输出格式
输出最大的快乐指数。
数据范围
1≤N≤6000, −128≤Hi≤127
输入样例
7
1
1
1
1
1
1
1
1 3
2 3
6 4
7 4
4 5
3 5输出样例
5 AC代码
//状态表示f[u][0/1]表示以u为父节点的最大快乐指数“0/1”表示“不选u/选u”
//状态计算f[u][0] max(f[j][0], f[j][1])
// f[u][1] f[j][0] 其中j表示u的直接子节点#includebits/stdc.h
using namespace std;const int N 6010;int n;
int happy[N]; //存快乐指数
int h[N], e[N], ne[N], idx; //构建树
bool hasfa[N]; //确定该节点是否存在父节点
int f[N][2];void add(int a, int b) //连接操作a是b的父节点
{e[idx] b, ne[idx] h[a], h[a] idx ;
}void dfs(int u) //深搜
{f[u][1] happy[u];for(int i h[u]; i ! -1; i ne[i])//遍历直至无子节点{int j e[i];dfs(j); //递归f[u][0] max(f[j][1], f[j][0]);f[u][1] f[j][0];}
}int main()
{cin n;for(int i 1; i n; i)cin happy[i];memset(h, -1, sizeof h);for(int i 0; i n - 1; i){int a, b;cin a b;add(b, a);hasfa[a] true;//标记其有父节点}//由于题目没有直接给出根节点则没有父节点的节点即是根节点int root 1;while(hasfa[root])root;dfs(root);cout max(f[root][1], f[root][0]) endl;return 0;
}