题目

有环的没有上司的舞会


分析

那么有环那就不是树形dp了,如何处理环,可以先连起来,树形dp,再把环断掉,再跑一次树形dp,两次的最大值即为答案


代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=1000010; long long dp[N][2],ans;
struct node{int y,next;}e[N];
int bk[N],ls[N],n,a[N],root,k=1; bool v[N];
inline long long max(long long a,long long b){return (a>b)?a:b;}
inline signed iut(){rr int ans=0; rr char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();return ans;
}
inline void add(int x,int y){e[++k]=(node){y,ls[x]}; ls[x]=k;}
inline void dfs(int x){v[x]=1; dp[x][0]=0; dp[x][1]=a[x];for (rr int i=ls[x];i;i=e[i].next)if (e[i].y!=root){dfs(e[i].y);dp[x][0]+=max(dp[e[i].y][0],dp[e[i].y][1]);//该点不选可以获得子节点dp[x][1]+=dp[e[i].y][0];//该点选了子节点选不了}else dp[e[i].y][1]=-707406378;
}
inline void circ(int x){v[root=x]=1;while (!v[bk[root]]) v[root=bk[root]]=1;//找环dfs(root);//先跑一次rr long long t=max(dp[root][0],dp[root][1]);v[root]=1; dfs(root=bk[root]);//再跑一次ans+=max(t,max(dp[root][0],dp[root][1]));
}
signed main(){n=iut();for (rr int i=1;i<=n;++i) a[i]=iut(),add(bk[i]=iut(),i);for (rr int i=1;i<=n;++i) if (!v[i]) circ(i);//避免重复return !printf("%lld",ans);
}

#基环树,树形dp#洛谷 2607 JZOJ 1723 骑士相关推荐

  1. 树形DP 洛谷P1272 道路重建

    好久没有更新博客了 But!今天凌晨突然发现spli神竟然不可描述地......本dog受到上亿吨伤害,看来spli神是要向sdfzyhx学习啊!!! 于是今天又开始脑抽地写博客了. P1272 重建 ...

  2. P2607-[ZJOI2008]骑士【基环树,树形dp】

    正题 题目大意 每个骑士有一个不可以同时上场的骑士,和一个战斗力.求最大战斗力. 解题思路 类似没有上司的舞会 其实就是在基环树森林,我们可以利用二次树形dp的方法. 先找到环,然后强行将环断开进行一 ...

  3. bzoj1791,P4381-[IOI2008]Island【基环树,树形dp,单调队列dp,树的直径】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P4381 题目大意 有n个岛,n条无向边(保证每个岛都有边连到).走过 ...

  4. [tarjan][树形dp] 洛谷 P2515 软件安装

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...

  5. 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏

    洛谷P4042[AHOI2014/JSOI2014]骑士游戏\color{#00F}{洛谷\ P4042\ [AHOI2014/JSOI2014]骑士游戏}洛谷 P4042 [AHOI2014/JSO ...

  6. [WC2018]通道——边分治+虚树+树形DP

    题目链接: [WC2018]通道 题目大意:给出三棵n个节点结构不同的树,边有边权,要求找出一个点对(a,b)使三棵树上这两点的路径权值和最大,一条路径权值为路径上所有边的边权和. 我们按照部分分逐个 ...

  7. [APIO2018]铁人两项——圆方树+树形DP

    题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方 ...

  8. BZOJ 2286 消耗战 (虚树+树形DP)

    给出一个n节点的无向树,每条边都有一个边权,给出m个询问, 每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接. 最少的边权和是多少. (n<=250000,sigma(ki)&l ...

  9. BZOJ5419[Noi2018]情报中心——线段树合并+虚树+树形DP

    题目链接: [NOI2018]情报中心 题目大意:给出一棵n个节点的树,边有非负边权,并给出m条链,对于每条链有一个代价,要求选出两条有公共边的链使两条链的并的边权和-两条链的代价和最大. 花了一天的 ...

最新文章

  1. 洛谷——P1014 Cantor表
  2. 一月17日新生冬季练习赛解题报告B.函数问题
  3. 二十三种设计模式-六大原则
  4. 怎么自学python编程-怎么自学python?
  5. 过程中心方法论,事务中心方法论。
  6. 大数据读书笔记(1)
  7. JAVA所有选手就位后比赛开始_Java多线程-CountDownLatch、CyclicBarrier、Semaphore
  8. 如何兼容html在不同分辨力的问题,现代教育技术练习题
  9. 阿里云大数据MaxCompute计算资源分布以及LogView分析优化
  10. 计算机的限制而被取消win7,win7系统本次操作由于这台计算机限制而被取消的解决方法...
  11. java网络通信:HTTP协议
  12. Django 1.10中文文档-聚合
  13. 开源软件的许可(License)
  14. 深度学习自学(三十四):换衣场景下行人重识别
  15. 凯立德导航android历史版本,凯立德导航升级2020版
  16. 利用云服务器自动发送天气预报邮件
  17. win7电脑蓝屏没有修复计算机,Win7旗舰版系统电脑老是出现蓝屏的修复教程
  18. 《中华颂》朗诵比赛准备
  19. 我要做-微处理器嵌入式系统设计师
  20. Facebook 如何存储150亿张、1.5PB的照片

热门文章

  1. Qt核心特性之 —— 「信号(Signal)与槽(Slot)」机制
  2. java 字符串切割
  3. 939微型计算机系统,AGP时代 939平台的首选芯片组-VIA K8T800Pro
  4. 学习笔记--vue Element 下拉框默认选中
  5. 怎么给iPhone手机上的待办事项软件加上密码锁
  6. 多线程编程之七:pthread条件变量
  7. MacBook pro m1 上玩金铲铲,通过手机ipa脱壳重新签名
  8. uni-app弹窗 小程序弹窗
  9. 【观察】软通动力:布道OpenHarmony生态 推动商用化关键进程
  10. navicat连接mysql 2058错误。