BZOJ 1040: [ZJOI2008]骑士 | 在基环外向树上DP
题目:
http://www.lydsy.com/JudgeOnline/problem.php?id=1040
题解:
我AC了
是自己写的
超开心
的
考虑断一条边
这样如果根节点不选答案一定正确
但是如果选了的话有可能他爸爸也选了
所以我们强制他爸爸选再更新答案
按照以上思路,存图存单向边即可
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 1000005
using namespace std;
typedef long long ll;
int n,val[N],fa[N],cnt[N],head[N],tot,ecnt;
bool vis[N];
ll ans,f[N][];
struct edge
{
int nxt,v;
}e[N];
inline void add(int u,int v)
{
e[++ecnt].v=v;e[ecnt].nxt=head[u]; head[u]=ecnt;fa[v]=u;
}
inline void Dfs(int x)
{
int y;vis[x]=;f[x][]=val[x];
for (int i=head[x];i;i=e[i].nxt)
if (!vis[y=e[i].v])
{
Dfs(y);
f[x][]+=max(f[y][],f[y][]);
f[x][]+=f[y][];
}
}
inline void Dp(int x)
{
int rt,y;
for (rt=x;cnt[rt]!=x;rt=fa[rt])
cnt[rt]=x;
Dfs(rt);
x=fa[rt];
f[x][]=f[x][];
for (x=fa[x];x!=rt;x=fa[x])
{
f[x][]=;f[x][]=val[x];
for (int i=head[x];i,y=e[i].v;i=e[i].nxt)
f[x][]+=max(f[y][],f[y][]),f[x][]+=f[y][];
}
f[rt][]=val[rt];
for (int i=head[rt];i;i=e[i].nxt)
f[rt][]+=f[y=e[i].v][];
ans+=max(f[rt][],f[rt][]);
}
int main()
{ scanf("%d",&n);
for (int i=,u;i<=n;i++)
{
scanf("%d%d",&val[i],&u);
add(u,i);
}
for (int i=;i<=n;i++)
if (!vis[i]) Dp(i);
printf("%lld\n",ans);
return ;
}
BZOJ 1040: [ZJOI2008]骑士 | 在基环外向树上DP的更多相关文章
- [BZOJ 1040] [ZJOI2008] 骑士 【基环+外向树DP】
题目链接:BZOJ - 1040 题目分析 这道题目的模型就是一个图,不一定联通,每个连通块的点数等于边数. 每个连通块都是一个基环+外向树.即树上增加了一条边. 如果是树,就可以直接树形DP了.然而 ...
- bzoj 1040 [ZJOI2008]骑士(基环外向树,树形DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1040 [题意] 给一个基环森林,每个点有一个权值,求一个点集使得点集中的点无边相连且权 ...
- bzoj 1040: [ZJOI2008]骑士【基环树+树形dp】
没考虑可以连着两个不选--直接染色了 实际上是基环森林,对于每棵基环树,dfs找出一个环边,然后断掉这条边,分别对这条边的两端点做一边treedp,取max加进答案里 treedp是设f[u]为选u点 ...
- 【BZOJ1040】[ZJOI2008] 骑士(基环外向树DP)
点此看题面 大致题意: 给你一片基环外向树森林,如果选定了一个点,就不能选择与其相邻的节点.求选中点的最大权值和. 树形\(DP\) 此题应该是 树形\(DP\) 的一个升级版:基环外向树\(DP\) ...
- BZOJ 1040: [ZJOI2008]骑士(基环树dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1040 题意: 思路: 这是基环树,因为每个人只会有一个厌恶的人,所以每个节点只会有一个父亲节点,但是 ...
- BZOJ 1040: [ZJOI2008]骑士 基环加外向树
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1190 Solved: 465[Submit][Status] ...
- bzoj 1040: [ZJOI2008]骑士 環套樹DP
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1755 Solved: 690[Submit][Status] ...
- bzoj 1040: [ZJOI2008]骑士 树形dp
题目链接 1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3054 Solved: 1162[Submit][S ...
- [BZOJ 1040][ZJOI2008]骑士
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5403 Solved: 2060[Submit][Status ...
随机推荐
- djangorestframework怎么这么好用!
一年前就已经用过restframework, 当时觉得这个只是给web框架打辅助的, 他能实现的我也都实现(可能没有那么好用, 嘿嘿) 但是我有一种东西叫做效率, 时间就是金钱, 别人造好的就直接用就 ...
- PHP 面向对象编程笔记 (麦子 php 第二阶段)
类是把具有相似特性的对象归纳到一个类中,类就是一组相同属性和行为的对象的集合.类和对象的关系:类是相似对象的描述,先有类,再有对象.类是对象的抽象,对象是类的实例.通过class关键字创建类,成员属性 ...
- JavaSE 第二次学习随笔(五)
/* * 中文乱码出现的情况研究 * 注意点:乱码解决的办法是再编码再解码 * 但是如果是编码出错了,无法解决.如果是解码出错了,可以利用再编码再解码 * * * 编码 解码 结果 * GBK utf ...
- hive自定义函数(UDF)
首先什么是UDF,UDF的全称为user-defined function,用户定义函数,为什么有它的存在呢?有的时候 你要写的查询无法轻松地使用Hive提供的内置函数来表示,通过写UDF,Hive就 ...
- Python学习:变量
变量(Variables): 是为了存储程序在运算过程中的一些中间结果,为了方便日后调用储存在计算的内存中 官方介绍: Variables are used to storeinformation t ...
- latex01-LaTeX环境的安装与配置
以Tex Live (跨平台的发行版软件)为例. 1.官网下载iso镜像文件 2.用advanced.bat 安装(管理员权限) 选择要安装的包(主要是去掉多余的语言包) 测试Tex Live 是否正 ...
- 渗透测试实验(i春秋 真的很简单)
首先利用给的提示: 所以用户名是 ichunqiu 密码是adab29e084ff095ce3eb 可以确定一般密码都是md5的,但是这个20位 应该去掉ada b29e084ff095ce3e才是正 ...
- (杭电 1097)A hard puzzle
A hard puzzle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- mybatis动态列名
mybatis动态列名 <select id="getUser" resultType="java.util.Map" parameterType=&qu ...
- 《UML大战需求分析》阅读笔记1
通过阅读本书的序和第一章,让我对于UML的理解更加深刻了,并且懂了怎样把你UML学的更好. 作者先让我们明白什么是UML,大概知道了UML各个图的形态和各种用途,然后再详细的介绍各个图怎样使用. UM ...