研华acdp手机版_generation z

研华acdp手机版_generation z上帝手中有 N 种世界元素,每种元素可以限制另外 1 种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i]。现在,上帝要把它们中的一部分投放到一个新的空间中去建造世界。为了世界的和平与安宁,上帝希望所有被投放的世界元素都有至少一个没有被投放的世界元素限制它。上帝希望知道,在此前提下,他最多可以投放多少种世界元素?输入格式第一行是一个整数 N,表示世界元素的数目。第二行有 N 个整数 A[1],A[2],…,A[N]。A[i] 表示第 i 个世界元素能够限制的世界元素的编号。输出格式

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

上帝手中有 N 种世界元素,每种元素可以限制另外 1 种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i]。

现在,上帝要把它们中的一部分投放到一个新的空间中去建造世界。

为了世界的和平与安宁,上帝希望所有被投放的世界元素都有至少一个没有被投放的世界元素限制它。

上帝希望知道,在此前提下,他最多可以投放多少种世界元素?

输入格式
第一行是一个整数 N,表示世界元素的数目。

第二行有 N 个整数 A[1],A[2],…,A[N]。A[i] 表示第 i 个世界元素能够限制的世界元素的编号。

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

数据范围
N≤106,1≤A[i]≤N
输入样例:
6
2 3 1 3 6 5
输出样例:
3
#include<bits/stdc++.h>
using namespace std;
const int N = 2e6 + 10;
const int M = 2 * N;
const int INF = 0x0f3f3f3f;
struct Edge{ 
   
    int v,next;
}edge[M];
int head[N],cnt;
void add(int u,int v){ 
   
    edge[cnt].v = v;
    edge[cnt].next = head[u];
    head[u] = cnt ++;
}
int ins[N],st[N],cir[N],pox,pre[N],pree[N];
int f[N][2];
bool rm[M],mark[N];
int ans;
void dfs_c(int u){ 
   
    st[u] = ins[u] = true;
    for(int i = head[u];~i;i = edge[i].next){ 
   
        if((i & 1) == 1)continue;
        int v = edge[i].v;
        pre[v] = u;
        pree[v] = i;
        if(!st[v])dfs_c(v);
        else if(ins[v]){ 
   
            for(int k = u;k != v;k = pre[k]){ 
   
                cir[pox ++] = k;
            }
            cir[pox ++] = v;
        }
    }
    ins[u] = false;
}
void dfs(int u){ 
   
    f[u][0] = 0,f[u][1] = -INF;
    int m = -INF;
    for(int i = head[u];~i;i = edge[i].next){ 
   
        int v = edge[i].v;
        if((i & 1) == 0 || rm[i])continue;
        dfs(v);
        f[u][0] += max(f[v][1],f[v][0]);
        m = max(m,-max(f[v][1],f[v][0]) + f[v][0]);
    }
    if(mark[u])f[u][1] = max(f[u][0] + m,max(f[u][0] + 1,1));
    else f[u][1] = f[u][0] + m + 1;
}
int main(){ 
   
    int n;
    memset(head,-1,sizeof head);
    scanf("%d",&n);
    int x;
    for(int i = 1;i <= n;i ++){ 
   
        scanf("%d",&x);
        add(i,x),add(x,i);
    }
    int ans = 0;
    for(int i = 1;i <= n;i ++){ 
   
        int res = 0;
        if(!st[i]){ 
   
            pox = 0;
            dfs_c(i);
            if(pox >= 1){ 
   
                int u = cir[0];
                int p = pre[u];
                rm[pree[u] ^ 1] = true;
                mark[u] = true;
                memset(f,0,sizeof f);
                dfs(p);
                res = max(res,f[p][0]);
                mark[u] = false;
                memset(f,0,sizeof f);
                dfs(p);
                res = max(res,f[p][1]);
                rm[pree[u] ^ 1] = false;
            }
        }
        ans += res;
    }
    cout<<ans<<endl;
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/169058.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决Pycharm运行速度慢的方法「建议收藏」

    解决Pycharm运行速度慢的方法「建议收藏」用惯了Jupyter,Spyder的开发者切换到Pycharm时,发现不论是打开IDE的速度,还是调试的速度都慢的让人想砸电脑,笔者在这花了好长时间生闷气,最终总结了几个坑来解决运行速度慢的问题,希望能帮到大家。1.扩大Pycharm运行内存打开后找到-Xms-Xmx两行,增加运行内存(根据电脑配置,笔者是8G内存),可明显改善打开IDE的速度2.新建工程选择Python解释器笔者常用Anaconda,因此选用了它3.解决运行时查看变量速度慢的方法File->Setting-&gt

    2022年8月28日
    0
  • httprunner(8)用例调用-RunTestCase[通俗易懂]

    httprunner(8)用例调用-RunTestCase[通俗易懂]前言一般我们写接口自动化的时候,遇到复杂的逻辑,都会调用API方法来满足前置条件,Pytest的特性是无法用例之间相互调动的,我们一般只调用自己封装的API方法。而httprunner支持用例之间

    2022年7月28日
    28
  • 重复字符串 leetcode_求字符串的最长无重复字符串

    重复字符串 leetcode_求字符串的最长无重复字符串原题链接给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s = “abcabcbb”输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,”pwk

    2022年8月9日
    3
  • sesvc.exe_alg是什么进程

    sesvc.exe_alg是什么进程今天公司的一台电脑一点右键就没有反应,通过任务管理发现每次启动都会有一个“Excel”进程,第一感觉就是中毒了,在网上找到了无暇解决方案杀毒方法:(切记:在操作过程中使用“右键->打开”,不可双击。)1.结束注册表中的fun.xls.exe的进程(建议选中fun.xls.exe->右键->转到进程,查找到“algsrvs.exe”单击它,再选择“…

    2022年10月3日
    0
  • 不同火车车型的座位分布图片_火车硬卧号码分布图

    不同火车车型的座位分布图片_火车硬卧号码分布图本文内容全部来自于网络,记录在此,只是为后期便于寻找。————————————-分割线——————————–

    2022年8月1日
    11
  • MySQL数据库:常见经典SQL语句

    MySQL数据库:常见经典SQL语句

    2021年10月4日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号