在tyvj上怀疑爆栈了.....或许一定是我写挂了。以后调吧。。。

UPD:bzoj上过了。。。

题解:https://blog.csdn.net/popoqqq/article/details/39965603

po姐太神了!

#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1001001,inf=0x3f3f3f3f;
int n;
int head[N],ans,cnt,a[N],p,tp,f[N],g[N],fa[N];
bool vis[N];
struct Edge {
int to,nxt;
bool cir;
} e[N];
void add(int bg,int ed) {
e[++cnt].to=ed;
e[cnt].nxt=head[bg];
head[bg]=cnt;
}
void dfs(int x) {
vis[x]=1;
if(vis[a[x]]) p=x;
else dfs(a[x]);
}
void Treedp(int x) {
f[x]=1;
g[x]=inf;
vis[x]=1;
if(x==tp) g[x]=0;
for(int i=head[x]; i; i=e[i].nxt) {
if(!e[i].cir&&e[i].to!=fa[x]) {
fa[e[i].to]=x;
Treedp(e[i].to);
g[x]+=min(g[e[i].to],f[e[i].to]);
g[x]=min(g[x],f[x]+f[e[i].to]-1);
f[x]+=min(g[e[i].to],f[e[i].to]);
}
}
}
int main() {
freopen("input.txt","r",stdin);
scanf("%d",&n);
printf("%d",n);
for(int i=1,x; i<=n; i++) {
scanf("%d",&a[i]);
add(a[i],i);
}
for(int i=1; i<=n; i++) {
if(!vis[i]) {
dfs(i);
e[p].cir=1;
tp=a[p];
Treedp(p);
int tmp=f[p];
tp=0;
Treedp(p);
ans+=min(tmp,g[p]);
}
}
printf("%d",n-ans);
}

Please contact lydsy2012@163.com!

「Poetize4」创世纪的更多相关文章

  1. 「Poetize4」上帝造题的七分钟2

    描述 Description "第一分钟,X说,要有数列,于是便给定了一个正整数数列.第二分钟,L说,要能修改,于是便有了对一段数中每个数都开平方(下取整)的操作.第三分钟,k说,要能查询, ...

  2. 「Poetize4」玉蟾宫

    描述 Description 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda.现在freda要在这里卖萌...它要找 ...

  3. Poetize4 创世纪

    3037: 创世纪 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 123  Solved: 66[Submit][Status] Description ...

  4. CH6401 创世纪

    6401 创世纪 0x60「图论」例题 描述 上帝手中有 N(N≤10^6) 种世界元素,每种元素可以限制另外1种元素,把第 i 种世界元素能够限制的那种世界元素记为 A[i].现在,上帝要把它们中的 ...

  5. 「Python」socket指南

    开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...

  6. 「MoreThanJava」计算机发展史—从织布机到IBM

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  7. 「MoreThanJava」一文了解二进制和CPU工作原理

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  8. 「MoreThanJava」机器指令到汇编再到高级编程语言

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  9. 「MoreThanJava」Java发展史及起航新世界

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

随机推荐

  1. GNUPlot绘制曲线

    发现gnuplot在mac上编译安装相当方便,在线下为了測试java老堆和lucene索引大小,须要绘制两条线,可是直接点连的线很难看,所以后面使用贝塞尔曲线. 脚本例如以下: #! /usr/loc ...

  2. _DataStructure_C_Impl:基数排序

    #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #de ...

  3. java生成一张图片

    public class CreateImage { public static void main(String[] args) throws Exception{ int width = 100; ...

  4. HDOJ 题目3308 LCIS(线段树,区间查询,区间合并)

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  5. 解题报告 之 HDU5303 Delicious Apples

    解题报告 之 HDU5303 Delicious Apples Description There are n apple trees planted along a cyclic road, whi ...

  6. C语言 - .c和.h文件的困惑

    本质上没有任何区别. 只不过一般:.h文件是头文件,内含函数声明.宏定义.结构体定义等内容. .c文件是程序文件,内含函数实现,变量定义等内容.而且是什么后缀也没有关系,只不过编译器会默认对某些后缀的 ...

  7. python时间戳

    time.strftime("%Y-%m-%dT%H:%M:%S.000", time.localtime())

  8. Spring进行表单验证

    转自:https://www.tianmaying.com/tutorial/spring-form-validation 开发环境 IDE+Java环境(JDK 1.7或以上版本) Maven 3. ...

  9. linux IPtable防火墙 禁止和开放端口(转)

    linux IPtable防火墙 禁止和开放端口源:http://hi.baidu.com/zplllm/item/f910cb26b621db57c38d5983评: 1.关闭所有的 INPUT F ...

  10. [JavaEE] Spring事务配置的五种方式

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...