BZOJ 1040:[ZJOI2008]骑士(环套外向树+树形DP)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1040
【题目大意】
给出环套外向树森林,求最大权独立集。
【题解】
我们对于每个连通块,找到环上的一条边拆开,对于边的两端分别做树形DP,
假设两端点位x和y,那么不包含x的dp值涵盖了是否包含y两种情况,
同理,以y为根的也是,因为边的两端不能同时取到,因此对于两者取最大值即可。
代码中f[x]表示包含x的dp值,g[x]表示不包含x的dp值。
【代码】
- #include <cstdio>
- #include <algorithm>
- #include <vector>
- using namespace std;
- typedef long long LL;
- const int N=1000010;
- vector<int> v[N],id[N];
- LL g[N],f[N],ans;
- int ban,n,c[N],x,vis[N],root,_root,idn=0;
- void dfs(int x,int fx){
- vis[x]=1;
- for(int i=0;i<v[x].size();i++){
- int y=v[x][i];
- if(y==fx)continue;
- if(!vis[y])dfs(y,x);
- else{root=y;_root=x;ban=id[x][i];}
- }
- }
- void TreeDP(int x,int fx){
- f[x]=c[x],g[x]=0;
- for(int i=0;i<v[x].size();i++){
- int y=v[x][i];
- if(y==fx)continue;
- if(id[x][i]==ban||id[x][i]==(ban^1))continue;
- TreeDP(y,x);
- f[x]+=g[y]; g[x]+=max(f[y],g[y]);
- }
- }
- int main(){
- scanf("%d",&n);
- for(int i=1;i<=n;i++){
- scanf("%d%d",&c[i],&x);
- v[x].push_back(i);
- id[x].push_back(idn++);
- v[i].push_back(x);
- id[i].push_back(idn++);
- }
- for(int i=1;i<=n;i++){
- if(!vis[i]){
- dfs(i,-1);
- TreeDP(root,-1);
- LL tmp=g[root];
- TreeDP(_root,-1);
- tmp=max(tmp,g[_root]);
- ans+=tmp;
- }
- }printf("%lld\n",ans);
- return 0;
- }
BZOJ 1040:[ZJOI2008]骑士(环套外向树+树形DP)的更多相关文章
- bzoj 1040: [ZJOI2008]骑士【基环树+树形dp】
没考虑可以连着两个不选--直接染色了 实际上是基环森林,对于每棵基环树,dfs找出一个环边,然后断掉这条边,分别对这条边的两端点做一边treedp,取max加进答案里 treedp是设f[u]为选u点 ...
- BZOJ 1040: [ZJOI2008]骑士(基环树dp)
http://www.lydsy.com/JudgeOnline/problem.php?id=1040 题意: 思路: 这是基环树,因为每个人只会有一个厌恶的人,所以每个节点只会有一个父亲节点,但是 ...
- 1040: [ZJOI2008]骑士~基环外向树dp
Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中 ...
- BZOJ 1040: [ZJOI2008]骑士 [DP 环套树]
传送门 题意:环套树的最大权独立集 一开始想处理出外向树树形$DP$然后找到环再做个环形$DP$ 然后看了看别人的题解其实只要断开环做两遍树形$DP$就行了...有道理! 注意不连通 然后洛谷时限再次 ...
- 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: 3054 Solved: 1162[Submit][S ...
- [BZOJ 1040][ZJOI2008]骑士
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5403 Solved: 2060[Submit][Status ...
- bzoj 1040: [ZJOI2008]骑士 環套樹DP
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1755 Solved: 690[Submit][Status] ...
- Bzoj 1040 [ZJOI2008]骑士 题解
1040: [ZJOI2008]骑士 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 5368 Solved: 2044[Submit][Status ...
随机推荐
- 2、MySQL常见数据库引擎及比较?
MySQL存储引擎简介 MySQL支持数个存储引擎作为对不同表的类型的处理器.MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎: MyISAM管理非事务表.它提供高速存储和检索,以及 ...
- 在linux内核中获得比jiffies精度更高的时间值【转】
转自:http://blog.chinaunix.net/uid-20672257-id-2831219.html 内核一般通过jiffies值来获取当前时间.尽管该数值表示的是自上次系统启动到当前的 ...
- 微信小程序宽高适配
小程序的宽任何机型都是750rpx,但是画布canvas的默认单位是px,可能会出现需要怪异的样式,我们可以用到 wx.getSystemInfoSync().windowWidth和 wx.getS ...
- Jquery屏蔽浏览器的F1-F12快捷键,在IE,GOOGLE下测试均无问题
在网上找了找,很多都是js实现的,东找西找,再加上自己的想法也勉强的完成了,直接看代码 <script type="text/javascript" src="Sc ...
- 将MongoDB安装成为Windows服务
使用以下命令将MongoDB安装成为Windows服务.笔者的MongoDB目录为D:\Program Files\mongodb 切换到D:\Program Files\mongodb\bin> ...
- JQuery判断一个元素下面是否有内容或者有某个标签
网站开发时,我们时常需要把没有内容的标签隐藏或者去掉.在用JQ有两种好的解决办法: 一.判断文本是否为空 var jqObj = $(this);if(jqObj.text().trim()){ // ...
- [Jsoi2011]柠檬
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...
- java字节码指令列表(转)
字节码 助记符 指令含义 0x00 nop 什么都不做 0x01 aconst_null 将null推送至栈顶 0x02 iconst_m1 将int型-1推送至栈顶 0x03 iconst_0 将i ...
- 机器学习方法:回归(一):线性回归Linear regression
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 开一个机器学习方法科普系列:做基础回顾之用,学而时习之:也拿出来与大家分享.数学水平有限,只求易懂,学习与工 ...
- netcore 配置文件使用
一直在记录整理接口调用,但是最近发现关于项目在vs中本地启动也有许多方便的地方. 首先由于使用的是Java的Eureka和网关来做的服务基础, 然后服务就涉及到注册一说, 问题是,如果appsetti ...