codevs1919创世纪

author author     2022-09-20     760

关键词:

1919 创世纪

 

 时间限制: 2 s
 空间限制: 128000 KB
 题目等级 : 大师 Master 
题目描述 Description

  上帝手中有着N 种被称作“世界元素”的东西,现在他要把它们中的一部分投放到一个新的空间中去以建造世界。每种世界元素都可以限制另外一种世界元素,所以说上帝希望所有被投放的世界元素都有至少一个没有被投放的世界元素能够限制它,这样上帝就可以保持对世界的控制。由于那个著名的有关于上帝能不能制造一块连自己都不能举起的大石头的二律背反命题,我们知道上帝不是万能的,而且不但不是万能的,他甚至有事情需要找你帮忙——上帝希望知道他最多可以投放多少种世界元素,但是他只会O(2N) 级别的算法。虽然上帝拥有无限多的时间,但是他也是个急性子。你需要帮助上帝解决这个问题。

输入描述 Input Description

  第一行是一个整数N,表示世界元素的数目。
  第二行有 N 个整数A1, A2, …, AN。Ai 表示第i 个世界元素能够限制的世界元素的编号。

输出描述 Output Description

  一个整数,表示最多可以投放的世界元素的数目。

样例输入 Sample Input

6
2 3 1 3 6 5

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

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

  对于 30% 的数据,N≤10。
  对于 100% 的数据,N≤106,1≤Ai≤N,不保证Ai≠i。

 

来源:Nescafe VIII

标签上写着树形dp,但是瞎搞搞居然就。。。神了。。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 10000003
using namespace std;
bool vis[maxn];
queue<int> q;
int val[maxn],n,rnk[maxn],ans;
int find(int x)
{
    int ret=0;
    while(!vis[x])
    {
        ret++;
        vis[x]=1;
        x=val[x];
    }
    return ret;
}
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&val[i]);
        ++rnk[val[i]];
    }
    for(int i=1;i<=n;++i) 
        if(!rnk[i]) q.push(i);
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        if(vis[val[u]]) continue;
        ans++;
        vis[val[u]]=1;
        if(--rnk[val[val[u]]]==0&&!vis[val[val[u]]]) q.push(val[val[u]]);
     } 
     for(int i=1;i<=n;++i) 
     if(!vis[i]) ans+=find(i)/2;
     printf("%d",ans);
     return 0;
}

大概是拓扑排序的样子。。

codevs4189字典

二次联通门:codevs4189字典  /*codevs4189字典Trie树裸题用指针写的..*/#include<cstdio>#include<cstring>#include<cstdlib>voidread(int&now){now=0;registercharword=getchar();while(word<‘0‘ 查看详情

[bzoj4326][codevs4632][codevs5440][uoj#150][noip2015]运输计划

[BZOJ4326][codevs4632][codevs5440][UOJ#150][NOIP2015]运输计划试题描述公元2044年,人类进入了宇宙纪元。L国有 n 个星球,还有 n?1 条双向航道,每条航道建立在两个星球之间,这 n?1 条航道连通了 L 国的所有星... 查看详情

codevs1086栈

http://codevs.cn/problem/1086/ (题目链接)题意  给出1~n总共n个数,对它们进行入栈出栈操作,问一共有多少种不同的方案。Solution  找规律手玩前4个发现是卡特兰数,再见。代码//codevs1086#include<algorithm>#include<iostream>#i... 查看详情

codevs1106篝火晚会

http://codevs.cn/problem/1106/ (题目链接)题意  将1~n顺序排列的环改成另一个环,问n-不动点数。Solution  啊智障啦,不会做×_×  左转hzwer代码//codevs1106#include<algorithm>#include<iostream>#include<cstdlib># 查看详情

codevs2115数集分割

http://codevs.cn/problem/2115/ 1//<2115.cpp>-SunOct912:58:2320162//ThisfileismadebyYJinpeng,createdbyXuYike‘sblacktechnologyautomatically.3//Copyright(C)2016ChangJunHighSchool,Inc.4//Idon‘t 查看详情

php[创世纪空白内容]创世纪修复空白内容#wordpress(代码片段)

查看详情

codevs1080质数环

http://codevs.cn/problem/1031/不讲什么,预处理素数+搜索//<C.cpp>-SunOct912:58:232016//ThisfileismadebyYJinpeng,createdbyXuYike‘sblacktechnologyautomatically.//Copyright(C)2016ChangJunHighSchool,Inc.//Idon‘t 查看详情

codevs1052

题目地址:http://codevs.cn/problem/1053/分析:模拟代码:vars:string;a:array[‘a‘..‘z‘]oflongint;i,j,t,n:longint;k:char;d:array[1..100000]oflongint;functioncf(x:longint):boolean;vari,y:longint;beginy:=0;fori:=2totru 查看详情

codevs3289花匠

题目:codevs3289花匠链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长“波浪”子序列。用动态规划可以解决,方程类似最长上升子序列:f[i]=max(f[j]) (1≤j≤i-1&&((f[j]%2=1&& A[j... 查看详情

codevs1296营业额统计

http://codevs.cn/problem/1296/ (题目链接)题意  给出一个序列,对于每一个数,找出之前与它相差最小的数,两者相减取绝对值加入答案。Solution  最近bzoj炸了,无奈只能上codevs刷题了。。好久没上过codevs了,实在是里面题目... 查看详情

codevs1814最长链

二次联通门: codevs1814最长链    /*codevs1814最长链树形DP当前点(LQZ)的最大价值由他的左儿子(HKD)和右儿子(SYL)的最大价值转移而来其余细节乱搞一下就可我还是水的很开心啦..*/#include<cstdio>#defineMax100080inlineintma... 查看详情

codevs1487大批整数排序

!!!CodeVS开发者有话说:        codevs自从换了评测机,新评测机的内存计算机制发生变化        计算内存的时候会包括栈空间swap空间      &nbs 查看详情

codevs哈希水题

1230多重hash练习一下,不用也可以////main.cpp//codeves1230////CreatedbyCandyon9/29/16.//Copyright©2016Candy.Allrightsreserved.//#include<iostream>#include<cstdio>#include<algorithm>#include& 查看详情

codevs1051接龙游戏

codevs1051接龙游戏http://codevs.cn/problem/1051/题目描述 Description给出了N个单词,已经按长度排好了序。如果某单词i是某单词j的前缀,i->j算一次接龙(两个相同的单词不能算接龙)。你的任务是:对于输入的单词,找出最长的龙。... 查看详情

text创世纪(代码片段)

查看详情

codevs2491玉蟾宫

codevs2491玉蟾宫http://codevs.cn/problem/2491/题目描述 Description  有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地。  这片土地被分成N*M个格子,每个格子里... 查看详情

php创世纪脚本。(代码片段)

查看详情

php创世纪信息。(代码片段)

查看详情