nssl1270-创世纪【树形dp,基环树】
正题
题目大意
每个物品有一个可以限制的物品,要求一个集合内所有的物品都有一个不在集合内物品限制。求这个集合可以保护的最多物品
解题思路
类似没有上司的舞会
其实就是在基环树森林,我们可以利用二次树形dp的方法。
先找到环,然后强行将环断开进行一次dp,然后强行连上进行一次dp,两个答案的最小值就得这棵树的最大物品。
其实也可以贪心,这里就不放了。
code
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 1000010
using namespace std;
struct node{int to,next;
}a[N];
int n,x,ans,tot,fa[N],root,f[N],g[N],ls[N],d[N],mark;
bool v[N];
void addl(int x,int y)
{a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;
}
void check_c(int x)//判环
{v[x]=true;if(v[d[x]]) mark=x;else check_c(d[x]);return;
}
void dp(int x)//树形dp
{v[x]=true;f[x]=1;g[x]=2147483647/3;if(x==root) g[x]=0;for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(i==mark||y==fa[x]) continue;fa[y]=x;dp(y);g[x]+=min(f[y],g[y]);g[x]=min(g[x],f[x]+f[y]-1);f[x]+=min(f[y],g[y]);}return;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&d[i]),addl(d[i],i);for(int i=1;i<=n;i++){if(v[i]) continue;check_c(i);root=d[mark];dp(mark);//断开环int maxs=f[mark];root=0;dp(mark);//连接环ans+=min(maxs,g[mark]);}printf("%d",n-ans);
}
nssl1270-创世纪【树形dp,基环树】相关推荐
- 旅游(树形dp求树的最大独立集)
链接:https://ac.nowcoder.com/acm/problem/15748 来源:牛客网 题目描述 Cwbc和XHRlyb生活在s市,这天他们打算一起出去旅游. 旅行地图上有n个城市,它 ...
- 树上子链(树形dp求树的直径)
树上子链 题意: 给定一棵树 T ,树 T 上每个点都有一个权值. 定义一颗树的子链的大小为:这个子链上所有结点的权值和 . 请在树 T 中找出一条最大的子链并输出. 题解: 求树的直径,题目中存在负 ...
- 【树形DP】树的重心详解+多组例题详解
目录 定义: 性质: 算法分析: POJ 1655 Balancing Act(求重心) POJ 3107 Godfather P1364 医院设置(树形DP) 定义: 树的重心也叫树的质心.对于一棵 ...
- Codeforces 671D. Roads in Yusland(树形DP+线段树)
调了半天居然还能是线段树写错了,药丸 这题大概是类似一个树形DP的东西.设$dp[i]$为修完i这棵子树的最小代价,假设当前点为$x$,但是转移的时候我们不知道子节点到底有没有一条越过$x$的路.如果 ...
- 【POJ - 2378】Tree Cutting(树形dp,树的重心变形)
题干: After Farmer John realized that Bessie had installed a "tree-shaped" network among his ...
- P2495 [SDOI2011]消耗战(树形dp+虚树)
P2495 [SDOI2011]消耗战 树形dp 状态表示:fuf_ufu表示以uuu为根的子树中,uuu节点与子树中的关键的"隔开"所需要的最小代价 状态转移: 考虑uuu的一 ...
- 洛谷P4338 [ZJOI2018]历史(LCT,树形DP,树链剖分)
洛谷题目传送门 ZJOI的考场上最弱外省选手T2 10分成功滚粗...... 首先要想到30分的结论 说实话Day1前几天刚刚刚掉了SDOI2017的树点涂色,考场上也想到了这一点 想到了又有什么用? ...
- 树形DP求树的最小支配集,最小点覆盖,最大独立集
转自:https://www.cnblogs.com/Ash-ly/p/5783877.html 一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合 ...
- 【数学期望】【LCA】【树形DP】树
树 题目大意 给你一棵有n个节点的树,以及m个询问,每个询问需要你回答一个点到另一个点要经过的期望边数 输入样例 4 2 1 2 2 3 3 4 1 4 3 4 输出样例 9 5 数据范围 对于 20 ...
最新文章
- DateEdit如果开启Vista模式并显示日期+时间模式
- 航天智慧物流创意组-技术培训
- javaBeen的四个作用范围
- Mysql 出现Got error 28 from storage engine
- 前端那些事之原生 js实现贪吃蛇篇
- 4、Spring配置中的classpath:与classpath*:的区别
- 数据库触发器调用python_python批量删除数据库触发器 | 学步园
- 一键打造全栈式小程序开发者!
- 剑指offer——面试题34:丑数
- 热门好用的邮编查询API
- 手把手教你用Python网络爬虫获取壁纸图片!
- 丰桥自助打印顺丰面单
- jmeter监控服务器插件jp@gc - PerfMon Metrics Collector报错 Operation timed out
- 2021年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂
- 苹果 微信发件 服务器,如何使用iPhone自带的邮件客户端管理企业邮箱?
- windows+ffmpeg+qsv实现inter核显加速视频解码编码
- Android60分钟搞定《FlappyBird》飞扬的小鸟游戏
- 索尼常务董事:绩效主义毁了索尼
- css发动机的机滤,作为发动机的“肾脏”,千奇百怪的机油滤清器你见过几个?...
- Windows 10 如何使用iso安装.Net Framework 3.5
热门文章
- java jli.dll_JVM、JRE、JDK之间的区别和联系,你居然还不知道?
- columnproperty server sql_获取SQL Server表字段的各种属性
- java中formfile,基于Struts FormFile上传文件
- hotelling t2 matlab,pca主成份分析方法
- android shell用户界面,shell界面下安装和卸载Android应用程序(apk包)
- MBR的Linux分区机制启动过程,linux系统启动流程(MBR)
- 河南大学计算机组成原理,河南大学计算机组成原理考点
- 1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对+map+vector) 超级详细 Come baby!!!
- 7-7 六度空间 (30 分)(BFS遍历详解)(DFS最后一个点过不去)
- 洛谷 P1958 上学路线-dfs