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 ...
随机推荐
- Leecode刷题之旅-C语言/python-14.最长公共前缀
/* * @lc app=leetcode.cn id=14 lang=c * * [14] 最长公共前缀 * * https://leetcode-cn.com/problems/longest-c ...
- stm32+lwip(五):以太网帧发送测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...
- stm32+lwip(四):网页服务器测试
我是卓波,很高兴你来看我的博客. 系列文章: stm32+lwip(一):使用STM32CubeMX生成项目 stm32+lwip(二):UDP测试 stm32+lwip(三):TCP测试 stm32 ...
- 博科brocade光纤交换机alias-zone的划分-->实操案例
一,图形化操作 光纤交换机作为SAN网络的重要组成部分,在日常应用中非常普遍,本次将以常用的博科交换机介绍基本的配置方法. 博科300实物图: 环境描述: 如上图,四台服务器通过各自的双HBA卡连接至 ...
- [【转】ubuntu 16.10 Server 安装及基本部署
一.Ubuntu Server 16.10 LTS 系统安装 Ubuntu 16.10 分为 桌面版 (desktop)和服务器版(Server).两者对于用户而言,最大的区别在于桌面版有图形操作界面 ...
- 获取单片机唯一id(stm32获取单片机唯一id)
stm32唯一id: 不同型号的stm32单片机,id不在同一地址上!具体地址可以通过用户手册中的Device electronic signature>Unique device ID reg ...
- 基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上)
基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上) 上周BOSS给分配任务让实现一下Mysql数据库的主从复制以及读写分离,然后花了一盏茶的功夫进行了调研,发现主从复制数据库进行一番 ...
- Eclipse中JS文件红叉处理
使用新版本的Eclipse 或者 MyEclipse,项目中的 JS文件出现红叉,让人觉得项目中存在错误代码,给人的感觉很不爽. 记录一下去掉红叉的方法: 第1步: 打开工作空间中的项目找到项目的 . ...
- IDA动态调试SO文件
1. 所需工具 IDA Pro 6.6. 安卓SDK工具 2. 模拟器设置 将ida所在目录的dbgsrv文件夹内的android_server文件push到模拟器中. 设置777属性 启动调试服务器 ...
- 《python核心编程第二版》第8章习题
8–1. 条件语句. 请看下边的代码 # statement Aif x > 0:# statement Bpasselif x < 0:# statement Cpasselse:# s ...