HDU 5242 Game
来源:互联网 发布:成都工作怎么样知乎 编辑:程序博客网 时间:2024/06/06 02:31
题意:一棵树有n个结点,n-1条边,每个结点有个权值。每次可以获得从根节点走到叶子结点所有结点的权值和,但是每个结点的权值只能使用一次。求走k次所能获得的最大权值和
思路:首先dfs一次求出所有叶子结点到根结点的权值和,然后从大到小排序,然后根据这个顺序再一次dfs求出每个结点到根节点的权值和,然后再次排序选前k个,证明:每次选择一个叶子结点走到根节点,相当于每次取一条单链,对于有交叉的两条链,先选权值大的肯定是最优的,因为对于某条跟它们没有交叉的链来说,这样子的操作并不会影响到它
#include<bits/stdc++.h>using namespace std;const int maxn = 100010;#define LL long longint n,k;LL a[maxn],ans[maxn];int vis[maxn];vector<int>e[maxn];struct Node{LL sum;int idx;bool operator<(const Node&a)const{return sum>a.sum;}}nodes[maxn];bool cmp(LL a,LL b){return a>b;}LL dfs1(int u){if (vis[u])return nodes[u].sum;nodes[u].sum = a[u];vis[u]=1;for (int i = 0;i<e[u].size();i++){int v = e[u][i];nodes[u].sum+=dfs1(v);}return nodes[u].sum;}LL dfs2(int u){if (vis[u])return 0;LL temp = a[u];vis[u]=1;for (int i = 0;i<e[u].size();i++){int v = e[u][i];temp+=dfs2(v);}return temp;}int main(){ int T,cas=1;scanf("%d",&T);while(T--){scanf("%d%d",&n,&k);for (int i = 1;i<=n;i++){scanf("%lld",&a[i]);nodes[i].idx = i;}for (int i = 0;i<=n;i++)e[i].clear();memset(vis,0,sizeof(vis));for (int i = 1;i<n;i++){int u,v;scanf("%d%d",&u,&v);//e[u].push_back(v);e[v].push_back(u);}for (int i = 1;i<=n;i++)if (!vis[i])dfs1(i);sort(nodes+1,nodes+1+n);memset(vis,0,sizeof(vis));for (int i = 1;i<=n;i++) ans[i] = dfs2(nodes[i].idx);sort(ans+1,ans+1+n,cmp);int cnt = 0;LL anss = 0;for (int i = 1;i<=n;i++){ anss+=ans[i]; cnt++; if (cnt==k) break;}printf("Case #%d: %lld\n",cas++,anss);}}
0 0
- hdu 5242 Game
- hdu - 5242 Game(链剖分)
- HDU 5242 Game
- HDU 5242 Game
- HDU 5242 Game
- hdu 5242 Game
- Game HDU
- Game HDU
- hdu 5242 Game(dfs+线段树)
- HDU-5242 Game (贪心&&树链剖分&&线段树)
- Hdu 5242 Game【Dfs+贪心】好题~
- HDU 2429 Word Game
- hdu 3074 Multiply game
- HDU 2419 Boring Game
- hdu 2429 Word Game
- HDU 3389 Game
- HDU 3657 Game
- HDU 1505 City Game
- android 布局relativeLayout实现底部标签
- warshall's algorithm
- C#OOP之七 多态的学习和使用
- 第九周上机实践项目——项目3-人数不定的工资类
- php之cookie【1】
- HDU 5242 Game
- 关于安卓开发环境配置方面的一些经验教训—Android Studio
- 【MYSQL】一台centos6.5主机建两个mysql实例实现主从复制环境
- 基于Windows的迭代回声服务器端/客户端(基于UDP的服务器端/客户端)
- Lock和synchronized的区别
- c印记(六): 数组与递归联合应用的小游戏
- hadoop集群搭建
- GCC编译的四个过程
- 《战拖有术》读书笔记(XI)