3929. 【NOIP2014模拟11.6】创世纪 (Standard IO)

Time Limits: 1000 ms Memory Limits: 65536 KB

Description

上帝手中有着n种被称作“世界元素”的东西,现在他要把它们中的一部分投放到一个新的空间中去以建造世界。每种世界元素都可以限制另外一种世界元素,所以说上帝希望所有被投放的世界元素都有至少一个没有被投放的世界元素能够限制它,这样上帝就可以保持对世界的控制。

由于那个著名的有关于上帝能不能制造一块连自己都不能举起的大石头的二律背反命题,我们知道上帝不是万能的,而且不但不是万能的,他甚至有事情需要找你帮忙——上帝希望知道他最多可以投放多少种世界元素,但是他只会O(2^n)级别的算法。虽然上帝拥有无限多的时间,但是他也是个急性子。你需要帮助上帝解决这个问题。

Input

第一行一个正整数n,表示世界元素的数目。

第二行n个正整数a_1, a_2, …, a_n。a_i表示第i个世界元素能够限制的世界元素的编号。

Output

最多可以投放的世界元素的数目。

Sample Input

6

2 3 1 3 6 5

Sample Output

3

样例说明:

选择2、3、5 三个世界元素即可,分别有1、4、6来限制它们。

Data Constraint

30%的数据,n<=10。

60%的数据,n<=10^5。

100%的数据,a_i<=n<=10^6。

题解

贪心或dp可以过(但是dp方程我没想到)

首先看题,把限制点指向被限制点,就形成了环套树,而且只有进环没有出环

很明显,没有入度的点是一定不能选的,只能用来限制

开始贪心

1. 对于树,从入度为0的点开始推进,隔一个选一个

2. 对于环,统计环内节点数,取一半就可以了

代码

#include<cstdio>
#define N 1000010 long next[N],r[N];
bool b[N]; int main()
{ long n,i,j,ans=0,num;
scanf("%ld",&n);
for(i=1;i<=n;i++){
scanf("%ld",&next[i]);
r[next[i]]++;
}
for(i=1;i<=n;i++)if(!r[i]&&!b[i]){
b[i]=true;
if(!b[next[i]]){
b[next[i]]=true;
r[next[i]]--;
r[next[next[i]]]--;
ans++;
for(j=next[next[i]];!r[j]&&!b[j];j=next[next[j]]){
b[j]=true;
if(!b[next[j]]){
b[next[j]]=true;
r[next[j]]--;
r[next[next[j]]]--;
ans++;
}else break;
}
}
}
for(i=1;i<=n;i++)
if(r[i]&&!b[i]){
num=1;
b[i]=true;
for(j=next[i];j!=i;j=next[j]){
b[j]=true;
num++;
}
ans+=num/2;
}
printf("%ld\n",ans);
return 0;
}

最新文章

  1. LightOJ1064 Throwing Dice(DP)
  2. osx 10.11.5 El Capitan U盘制作安装
  3. Apache目录结构(一)
  4. C++:运算符重载函数之&quot;++&quot;、&quot;--&quot;、&quot;[ ]&quot;、&quot;==&quot;的应用
  5. 安装drupal练习网站遇到的问题
  6. java collection framework
  7. SQL Server索引进阶:第二级,深入非聚集索引
  8. echarts 显示下载按钮,echarts 自定义按钮,echarts 添加按钮
  9. C语言/原子/编译,你真的明白了吗?
  10. 不懂这些高并发分布式架构、分布式系统的数据一致性解决方案,你如何能找到高新互联网工作呢?强势解析eBay BASE模式、去哪儿及蘑菇街分布式架构
  11. Android Studio 3.1.2 修改字体(font)大小(size) 及老版本修改主题、字体、颜色 参照地址
  12. bootstrap的模拟单选按钮
  13. CentOS7中设置Tomcat8开机自启动
  14. ssh-remote-port-forwarding
  15. Sql Server 中由数字转换为指定长度的字符串
  16. 搞死人的contextRoot;weblogic9.2
  17. godaddy 亚太机房 更换 美国机房 全过程(图)
  18. C#项目中引入app.manifest管理员权限运行
  19. SqlBulkCopy 批量导入数据 转换表字段类型
  20. 表格中的td内的div的文字内容禁止换行一行显示的css

热门文章

  1. iOS传感器集锦、飞机大战、开发调试工具、强制更新、Swift仿QQ空间头部等源码
  2. Yii框架的学习指南(策码秀才篇)1-1 如何认识Yii framework
  3. [LC] 520. Detect Capital
  4. HDU-6707-Shuffle Card(很数据结构的一道题)
  5. crack|erosion|strip|
  6. 为什么说iPhone无望恢复中国市场?
  7. 制作MACOSX 10.9Mavericks安装启动U盘教程
  8. linux上python3的安装
  9. MyBatis SQL语句写法
  10. hexo NexT主题首页title链接的优化