hdu6060 RXD and dividing
2017-08-27 14:40
453 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6060
题意:给你一棵有n个结点的树,让你把他的2~k个节点分成k份,然后求1号顶点到每份里各个顶点的最大权值和,比如说样例,就是分成了{2},{3},{4},{5},到每个顶点的距离即是到这个顶点在原图上到顶点的距离
解析:其实画多几棵树会发现一个问题,就是有些变权是会被多次重复计算的,比如样例,(1,2)这条边就重复计算了3次,所以肯定最好的结果,是把2的子节点尽可能不和2分到一起,那么(1,2)这条边最多计算几次呢,当然是min(k,sz[2]),sz[2]表示2的子树规模大小,按这个规律去从根节点dfs一次,预处理处每个结点的子树大小,答案应该就是每个边权乘上其对应的权值求和
题意:给你一棵有n个结点的树,让你把他的2~k个节点分成k份,然后求1号顶点到每份里各个顶点的最大权值和,比如说样例,就是分成了{2},{3},{4},{5},到每个顶点的距离即是到这个顶点在原图上到顶点的距离
解析:其实画多几棵树会发现一个问题,就是有些变权是会被多次重复计算的,比如样例,(1,2)这条边就重复计算了3次,所以肯定最好的结果,是把2的子节点尽可能不和2分到一起,那么(1,2)这条边最多计算几次呢,当然是min(k,sz[2]),sz[2]表示2的子树规模大小,按这个规律去从根节点dfs一次,预处理处每个结点的子树大小,答案应该就是每个边权乘上其对应的权值求和
#include <bits/stdc++.h> using namespace std; const int maxn = 1e6+100; typedef long long ll; vector<pair<int,int> >G[maxn]; int sz[maxn]; int w[maxn]; void dfs(int u,int fa) { sz[u] = 1; for(int i=0;i<(int)G[u].size();i++) { pair<int,int> v = G[u][i]; if(v.first==fa) continue; w[v.first] = v.second; dfs(v.first,u); sz[u] += sz[v.first]; } } int main(void) { int n,k; while(~scanf("%d %d",&n,&k)) { for(int i=0;i<=n;i++) G[i].clear(); memset(sz,0,sizeof(sz)); memset(w,0,sizeof(w)); for(int i=0;i<n-1;i++) { int u,v,w; scanf("%d %d %d",&u,&v,&w); G[u].push_back(make_pair(v,w)); G[v].push_back(make_pair(u,w)); } dfs(1,-1); ll sum = 0; for(int i=2;i<=n;i++) sum += 1LL*w[i]*min(k,sz[i]); printf("%I64d\n",sum); } return 0; }
相关文章推荐
- 2017杭电多校联赛第三场-RXD and dividing (hdu6060)最小生成树
- HDU6060-RXD and dividing
- 【HDU6060】RXD and dividing(dfs)
- HDU6060-RXD and dividing
- HDU6060 RXD and dividing【DFS】
- 多校3 hdu6060 RXD and dividing
- hdu6060 RXD and dividing
- 2017 Multi-University Training Contest - Team 3 hdu6060 RXD and dividing
- Hdu6060 RXD and dividing(2017多校第3场)
- hdu6060 RXD and dividing
- 2017杭电多校第三场1005 RXD and dividing(最大化k个斯坦纳树分块的最大权值和)HDU6060
- HDU6060-RXD and dividing 简单树形DP+贪心
- hdu6060-思维&搜索&好题-RXD and dividing
- hdu6060 RXD and dividing 贪心
- hdu6060 RXD and dividing
- Hdu 6060 RXD and dividing【思维】
- HDU-6060 RXD and dividing - 2017 Multi-University Training Contest - Team 3(思维+最小斯坦纳树)
- 2017 Multi-University Training Contest - Team 3 1005 RXD and dividing
- hdu 6060 RXD and dividing (树 + 贪心)
- 2017年多校赛第三场 1005 RXD and dividing(DFS)