正题


题目大意

每个物品有一个可以限制的物品,要求一个集合内所有的物品都有一个不在集合内物品限制。求这个集合可以保护的最多物品


解题思路

类似没有上司的舞会
其实就是在基环树森林,我们可以利用二次树形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,基环树】相关推荐

  1. 旅游(树形dp求树的最大独立集)

    链接:https://ac.nowcoder.com/acm/problem/15748 来源:牛客网 题目描述 Cwbc和XHRlyb生活在s市,这天他们打算一起出去旅游. 旅行地图上有n个城市,它 ...

  2. 树上子链(树形dp求树的直径)

    树上子链 题意: 给定一棵树 T ,树 T 上每个点都有一个权值. 定义一颗树的子链的大小为:这个子链上所有结点的权值和 . 请在树 T 中找出一条最大的子链并输出. 题解: 求树的直径,题目中存在负 ...

  3. 【树形DP】树的重心详解+多组例题详解

    目录 定义: 性质: 算法分析: POJ 1655 Balancing Act(求重心) POJ 3107 Godfather P1364 医院设置(树形DP) 定义: 树的重心也叫树的质心.对于一棵 ...

  4. Codeforces 671D. Roads in Yusland(树形DP+线段树)

    调了半天居然还能是线段树写错了,药丸 这题大概是类似一个树形DP的东西.设$dp[i]$为修完i这棵子树的最小代价,假设当前点为$x$,但是转移的时候我们不知道子节点到底有没有一条越过$x$的路.如果 ...

  5. 【POJ - 2378】Tree Cutting(树形dp,树的重心变形)

    题干: After Farmer John realized that Bessie had installed a "tree-shaped" network among his ...

  6. P2495 [SDOI2011]消耗战(树形dp+虚树)

    P2495 [SDOI2011]消耗战 树形dp 状态表示:fuf_ufu​表示以uuu为根的子树中,uuu节点与子树中的关键的"隔开"所需要的最小代价 状态转移: 考虑uuu的一 ...

  7. 洛谷P4338 [ZJOI2018]历史(LCT,树形DP,树链剖分)

    洛谷题目传送门 ZJOI的考场上最弱外省选手T2 10分成功滚粗...... 首先要想到30分的结论 说实话Day1前几天刚刚刚掉了SDOI2017的树点涂色,考场上也想到了这一点 想到了又有什么用? ...

  8. 树形DP求树的最小支配集,最小点覆盖,最大独立集

    转自:https://www.cnblogs.com/Ash-ly/p/5783877.html 一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合 ...

  9. 【数学期望】【LCA】【树形DP】树

    树 题目大意 给你一棵有n个节点的树,以及m个询问,每个询问需要你回答一个点到另一个点要经过的期望边数 输入样例 4 2 1 2 2 3 3 4 1 4 3 4 输出样例 9 5 数据范围 对于 20 ...

最新文章

  1. DateEdit如果开启Vista模式并显示日期+时间模式
  2. 航天智慧物流创意组-技术培训
  3. javaBeen的四个作用范围
  4. Mysql 出现Got error 28 from storage engine
  5. 前端那些事之原生 js实现贪吃蛇篇
  6. 4、Spring配置中的classpath:与classpath*:的区别
  7. 数据库触发器调用python_python批量删除数据库触发器 | 学步园
  8. 一键打造全栈式小程序开发者!
  9. 剑指offer——面试题34:丑数
  10. 热门好用的邮编查询API
  11. 手把手教你用Python网络爬虫获取壁纸图片!
  12. 丰桥自助打印顺丰面单
  13. jmeter监控服务器插件jp@gc - PerfMon Metrics Collector报错 Operation timed out
  14. 2021年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂
  15. 苹果 微信发件 服务器,如何使用iPhone自带的邮件客户端管理企业邮箱?
  16. windows+ffmpeg+qsv实现inter核显加速视频解码编码
  17. Android60分钟搞定《FlappyBird》飞扬的小鸟游戏
  18. 索尼常务董事:绩效主义毁了索尼
  19. css发动机的机滤,作为发动机的“肾脏”,千奇百怪的机油滤清器你见过几个?...
  20. Windows 10 如何使用iso安装.Net Framework 3.5

热门文章

  1. java jli.dll_JVM、JRE、JDK之间的区别和联系,你居然还不知道?
  2. columnproperty server sql_获取SQL Server表字段的各种属性
  3. java中formfile,基于Struts FormFile上传文件
  4. hotelling t2 matlab,pca主成份分析方法
  5. android shell用户界面,shell界面下安装和卸载Android应用程序(apk包)
  6. MBR的Linux分区机制启动过程,linux系统启动流程(MBR)
  7. 河南大学计算机组成原理,河南大学计算机组成原理考点
  8. 1010 Lehmer Code (35 分)(思路+详解+树状数组的学习+逆序对+map+vector) 超级详细 Come baby!!!
  9. 7-7 六度空间 (30 分)(BFS遍历详解)(DFS最后一个点过不去)
  10. 洛谷 P1958 上学路线-dfs