题目:

http://www.lydsy.com/JudgeOnline/problem.php?id=1040


题解:

我AC了

是自己写的

超开心

考虑断一条边

这样如果根节点不选答案一定正确

但是如果选了的话有可能他爸爸也选了

所以我们强制他爸爸选再更新答案

按照以上思路,存图存单向边即可

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. #define N 1000005
  5. using namespace std;
  6. typedef long long ll;
  7. int n,val[N],fa[N],cnt[N],head[N],tot,ecnt;
  8. bool vis[N];
  9. ll ans,f[N][];
  10. struct edge
  11. {
  12. int nxt,v;
  13. }e[N];
  14. inline void add(int u,int v)
  15. {
  16. e[++ecnt].v=v;e[ecnt].nxt=head[u]; head[u]=ecnt;fa[v]=u;
  17. }
  18. inline void Dfs(int x)
  19. {
  20. int y;vis[x]=;f[x][]=val[x];
  21. for (int i=head[x];i;i=e[i].nxt)
  22. if (!vis[y=e[i].v])
  23. {
  24. Dfs(y);
  25. f[x][]+=max(f[y][],f[y][]);
  26. f[x][]+=f[y][];
  27. }
  28. }
  29. inline void Dp(int x)
  30. {
  31. int rt,y;
  32. for (rt=x;cnt[rt]!=x;rt=fa[rt])
  33. cnt[rt]=x;
  34. Dfs(rt);
  35. x=fa[rt];
  36. f[x][]=f[x][];
  37. for (x=fa[x];x!=rt;x=fa[x])
  38. {
  39. f[x][]=;f[x][]=val[x];
  40. for (int i=head[x];i,y=e[i].v;i=e[i].nxt)
  41. f[x][]+=max(f[y][],f[y][]),f[x][]+=f[y][];
  42. }
  43. f[rt][]=val[rt];
  44. for (int i=head[rt];i;i=e[i].nxt)
  45. f[rt][]+=f[y=e[i].v][];
  46. ans+=max(f[rt][],f[rt][]);
  47. }
  48. int main()
  49. {
  50.  
  51. scanf("%d",&n);
  52. for (int i=,u;i<=n;i++)
  53. {
  54. scanf("%d%d",&val[i],&u);
  55. add(u,i);
  56. }
  57. for (int i=;i<=n;i++)
  58. if (!vis[i]) Dp(i);
  59. printf("%lld\n",ans);
  60. return ;
  61. }

BZOJ 1040: [ZJOI2008]骑士 | 在基环外向树上DP的更多相关文章

  1. [BZOJ 1040] [ZJOI2008] 骑士 【基环+外向树DP】

    题目链接:BZOJ - 1040 题目分析 这道题目的模型就是一个图,不一定联通,每个连通块的点数等于边数. 每个连通块都是一个基环+外向树.即树上增加了一条边. 如果是树,就可以直接树形DP了.然而 ...

  2. bzoj 1040 [ZJOI2008]骑士(基环外向树,树形DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1040 [题意] 给一个基环森林,每个点有一个权值,求一个点集使得点集中的点无边相连且权 ...

  3. bzoj 1040: [ZJOI2008]骑士【基环树+树形dp】

    没考虑可以连着两个不选--直接染色了 实际上是基环森林,对于每棵基环树,dfs找出一个环边,然后断掉这条边,分别对这条边的两端点做一边treedp,取max加进答案里 treedp是设f[u]为选u点 ...

  4. 【BZOJ1040】[ZJOI2008] 骑士(基环外向树DP)

    点此看题面 大致题意: 给你一片基环外向树森林,如果选定了一个点,就不能选择与其相邻的节点.求选中点的最大权值和. 树形\(DP\) 此题应该是 树形\(DP\) 的一个升级版:基环外向树\(DP\) ...

  5. BZOJ 1040: [ZJOI2008]骑士(基环树dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1040 题意: 思路: 这是基环树,因为每个人只会有一个厌恶的人,所以每个节点只会有一个父亲节点,但是 ...

  6. BZOJ 1040: [ZJOI2008]骑士 基环加外向树

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1190  Solved: 465[Submit][Status] ...

  7. bzoj 1040: [ZJOI2008]骑士 環套樹DP

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1755  Solved: 690[Submit][Status] ...

  8. bzoj 1040: [ZJOI2008]骑士 树形dp

    题目链接 1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3054  Solved: 1162[Submit][S ...

  9. [BZOJ 1040][ZJOI2008]骑士

    1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 5403  Solved: 2060[Submit][Status ...

随机推荐

  1. Leecode刷题之旅-C语言/python-14.最长公共前缀

    /* * @lc app=leetcode.cn id=14 lang=c * * [14] 最长公共前缀 * * https://leetcode-cn.com/problems/longest-c ...

  2. stm32+lwip(五):以太网帧发送测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  3. stm32+lwip(四):网页服务器测试

    我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...

  4. 博科brocade光纤交换机alias-zone的划分-->实操案例

    一,图形化操作 光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法. 博科300实物图: 环境描述: 如上图,四台服务器通过各自的双HBA卡连接至 ...

  5. [【转】ubuntu 16.10 Server 安装及基本部署

    一.Ubuntu Server 16.10 LTS 系统安装 Ubuntu 16.10 分为 桌面版 (desktop)和服务器版(Server).两者对于用户而言,最大的区别在于桌面版有图形操作界面 ...

  6. 获取单片机唯一id(stm32获取单片机唯一id)

    stm32唯一id: 不同型号的stm32单片机,id不在同一地址上!具体地址可以通过用户手册中的Device electronic signature>Unique device ID reg ...

  7. 基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上)

    基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上) 上周BOSS给分配任务让实现一下Mysql数据库的主从复制以及读写分离,然后花了一盏茶的功夫进行了调研,发现主从复制数据库进行一番 ...

  8. Eclipse中JS文件红叉处理

    使用新版本的Eclipse 或者 MyEclipse,项目中的 JS文件出现红叉,让人觉得项目中存在错误代码,给人的感觉很不爽. 记录一下去掉红叉的方法: 第1步: 打开工作空间中的项目找到项目的 . ...

  9. IDA动态调试SO文件

    1. 所需工具 IDA Pro 6.6. 安卓SDK工具 2. 模拟器设置 将ida所在目录的dbgsrv文件夹内的android_server文件push到模拟器中. 设置777属性 启动调试服务器 ...

  10. 《python核心编程第二版》第8章习题

    8–1. 条件语句. 请看下边的代码 # statement Aif x > 0:# statement Bpasselif x < 0:# statement Cpasselse:# s ...