#基环树,树形dp#洛谷 2607 JZOJ 1723 骑士
题目
有环的没有上司的舞会
分析
那么有环那就不是树形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 骑士相关推荐
- 树形DP 洛谷P1272 道路重建
好久没有更新博客了 But!今天凌晨突然发现spli神竟然不可描述地......本dog受到上亿吨伤害,看来spli神是要向sdfzyhx学习啊!!! 于是今天又开始脑抽地写博客了. P1272 重建 ...
- P2607-[ZJOI2008]骑士【基环树,树形dp】
正题 题目大意 每个骑士有一个不可以同时上场的骑士,和一个战斗力.求最大战斗力. 解题思路 类似没有上司的舞会 其实就是在基环树森林,我们可以利用二次树形dp的方法. 先找到环,然后强行将环断开进行一 ...
- bzoj1791,P4381-[IOI2008]Island【基环树,树形dp,单调队列dp,树的直径】
正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P4381 题目大意 有n个岛,n条无向边(保证每个岛都有边连到).走过 ...
- [tarjan][树形dp] 洛谷 P2515 软件安装
题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...
- 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏
洛谷P4042[AHOI2014/JSOI2014]骑士游戏\color{#00F}{洛谷\ P4042\ [AHOI2014/JSOI2014]骑士游戏}洛谷 P4042 [AHOI2014/JSO ...
- [WC2018]通道——边分治+虚树+树形DP
题目链接: [WC2018]通道 题目大意:给出三棵n个节点结构不同的树,边有边权,要求找出一个点对(a,b)使三棵树上这两点的路径权值和最大,一条路径权值为路径上所有边的边权和. 我们按照部分分逐个 ...
- [APIO2018]铁人两项——圆方树+树形DP
题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方 ...
- BZOJ 2286 消耗战 (虚树+树形DP)
给出一个n节点的无向树,每条边都有一个边权,给出m个询问, 每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接. 最少的边权和是多少. (n<=250000,sigma(ki)&l ...
- BZOJ5419[Noi2018]情报中心——线段树合并+虚树+树形DP
题目链接: [NOI2018]情报中心 题目大意:给出一棵n个节点的树,边有非负边权,并给出m条链,对于每条链有一个代价,要求选出两条有公共边的链使两条链的并的边权和-两条链的代价和最大. 花了一天的 ...
最新文章
- 洛谷——P1014 Cantor表
- 一月17日新生冬季练习赛解题报告B.函数问题
- 二十三种设计模式-六大原则
- 怎么自学python编程-怎么自学python?
- 过程中心方法论,事务中心方法论。
- 大数据读书笔记(1)
- JAVA所有选手就位后比赛开始_Java多线程-CountDownLatch、CyclicBarrier、Semaphore
- 如何兼容html在不同分辨力的问题,现代教育技术练习题
- 阿里云大数据MaxCompute计算资源分布以及LogView分析优化
- 计算机的限制而被取消win7,win7系统本次操作由于这台计算机限制而被取消的解决方法...
- java网络通信:HTTP协议
- Django 1.10中文文档-聚合
- 开源软件的许可(License)
- 深度学习自学(三十四):换衣场景下行人重识别
- 凯立德导航android历史版本,凯立德导航升级2020版
- 利用云服务器自动发送天气预报邮件
- win7电脑蓝屏没有修复计算机,Win7旗舰版系统电脑老是出现蓝屏的修复教程
- 《中华颂》朗诵比赛准备
- 我要做-微处理器嵌入式系统设计师
- Facebook 如何存储150亿张、1.5PB的照片