传送门

解题思路

  比较好想的一道思路题,结果有个地方没开\(long\) \(long\) \(wa\)了三次。。其实就是模仿一下树链剖分,重新定义重儿子,一个点的重儿子为所有儿子中到叶节点权值最大的点,然后就和树链剖分一样\(dfs\)一遍,把那些链的顶端的\(sum\)值放到一个数组排个序。

代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. using namespace std;
  7. const int MAXN = 200005;
  8. typedef long long LL;
  9. inline int rd(){
  10. int x=0,f=1;char ch=getchar();
  11. while(!isdigit(ch)) f=ch=='-'?0:1,ch=getchar();
  12. while(isdigit(ch)) x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
  13. return f?x:-x;
  14. }
  15. int n,k,head[MAXN],cnt,to[MAXN],nxt[MAXN],fa[MAXN];
  16. int w[MAXN],son[MAXN],num;
  17. LL ans,sum[MAXN],tmp[MAXN];
  18. inline void add(int bg,int ed){
  19. to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
  20. }
  21. inline bool cmp(LL x,LL y){
  22. return x>y;
  23. }
  24. void dfs1(int x){
  25. LL maxson=0,u;sum[x]=w[x];
  26. for(int i=head[x];i;i=nxt[i]){
  27. u=to[i];dfs1(u);
  28. if(sum[u]>maxson) {maxson=sum[u];son[x]=u;}
  29. }
  30. sum[x]+=maxson;
  31. }
  32. signed main(){
  33. n=rd(),k=rd();int x,y;
  34. for(int i=1;i<=n;i++) w[i]=rd();
  35. for(int i=1;i<n;i++){
  36. x=rd(),y=rd();fa[y]=x;
  37. add(x,y);
  38. }
  39. dfs1(1);
  40. for(int i=1;i<=n;i++) if(i!=son[fa[i]]) tmp[++num]=sum[i];
  41. sort(tmp+1,tmp+1+num,cmp);
  42. for(int i=1;i<=k;i++) ans+=tmp[i];
  43. printf("%lld\n",ans);
  44. return 0;
  45. }

BZOJ 3252: 攻略(思路题)的更多相关文章

  1. BZOJ[3252]攻略(长链剖分)

    BZOJ[3252]攻略 Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX半岛> ...

  2. bzoj 3252: 攻略 -- 长链剖分+贪心

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MB Description 题目简述:树版[k取方格数]   众所周知,桂木桂马是攻略之神,开启攻略之神 ...

  3. 【贪心】 BZOJ 3252:攻略

    3252: 攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 261  Solved: 90[Submit][Status][Discuss] De ...

  4. bzoj 3252: 攻略

    3252: 攻略 Description 题目简述:树版[k取方格数]   众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏. 今天他得到了一款新游戏<XX半岛>, ...

  5. 【刷题】BZOJ 3252 攻略

    Description 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(s ...

  6. bzoj 3252 攻略 长链剖分思想+贪心

    攻略 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 889  Solved: 423[Submit][Status][Discuss] Descrip ...

  7. BZOJ.3252.攻略(贪心 长链剖分/线段树)

    题目链接 贪心,每次选价值最大的一条到根的链.比较显然(不选白不选). 考虑如何维护这个过程.一个点的价值选了就没有了,而它只会影响它子树里的点,可以用DFS序+线段树修改.而求最大值也可以用线段树. ...

  8. [HYSBZ - 3252] 攻略

    问题描述 题目简述:树版[k取方格数] 众所周知,桂木桂马是攻略之神,开启攻略之神模式后,他可以同时攻略k部游戏.今天他得到了一款新游戏<XX 半岛>,这款游戏有n个场景(scene),某 ...

  9. bzoj 1086 王室联邦 —— 思路题

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1086 一眼看去很是不会,于是看看TJ... https://blog.csdn.net/ly ...

随机推荐

  1. mui-popover显示、隐藏弹出菜单的方法

    一.mui-popover要显示.隐藏弹出菜单,可使用锚点方式. <div id="popover" class="box mui-popover mui-popp ...

  2. 06-图2 Saving James Bond - Easy Version(25 分)

    This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...

  3. sequel 远程连接 MySQL 连接错误Can't connect to MySQL server on (61)

    Mac sequel Pro链接时报错Can’t connect to MySQL server on ‘xx.xx.xx.xx’ (61). PS. win版Navicat 报错Can’t conn ...

  4. Windows 8.1 PLSQL_32连接到RHEL6.1 Oracle10gr2_64

    目录 目录 系统环境 连接Oracle Server 系统环境 操作系统 Windows 8.1 RHEL6.1 软件 Oracle10gr2 PL/SQL instantclient-basic-w ...

  5. sublime useful packages

    Package control Prefixr Emmet

  6. 将日志(Microsoft.Extensions.Logging)添加到.NET Core控制台应用程序

    在.NET Core项目中,日志记录是通过依赖项注入进行管理的. 尽管这对于ASP.NET项目效果很好,但在启动Startup.cs中的新项目时,所有这些都会自动创建,而在控制台应用程序中则需要一些配 ...

  7. C++——迭代器

    除了每个容器定义的迭代器外,iterator库内还定义了其他的迭代器. 1.插入迭代器:向容器中插入元素 1.1 back_inserter 1.2 front_inserter 1.3 insert ...

  8. Python常用模块系列

    1.时间模块 import time,datetime # print(time.time()) #时间戳 # print(time.strftime("%Y-%m-%d %X") ...

  9. PAT甲级——A1150 TravellingSalesmanProblem【25】

    The "travelling salesman problem" asks the following question: "Given a list of citie ...

  10. Python之字符串搜索和替换

    简单直接使用 str.replace() text="zzy is a beautiful boy" print(text.replace("boy",&quo ...