SOS
2026-02-24 17:44:38
发布于:四川
1阅读
0回复
0点赞
#include <cstdio>
#include<iostream>
using namespace std;
const int N=105;
struct Edge{
int v,pre;
}edge[N];
int head[N],node=0;
void add_edge(int u,int v){
edge[++node].v=v;
edge[node].pre=head[u];
head[u]=node;
}
int vis[N];
int n;
void dfs(int u){
vis[u]=1;
for(int i=head[u];i;i=edge[i].pre){
int v=edge[i].v;
if(!vis[v]){
dfs(v);
}
}
return;
}
int out[N];
int main(){
cin>>n;
for(int i=0;i<n;++i){
int u;
cin>>u;
add_edge(i,u);
if(i!=u)out[i]=1;
}
int ans=0;
for(int i=0;i<n;++i){
if(out[i]&&!vis[i]){
dfs(i);
ans++;
}
}
for(int i=0;i<n;++i)if(!vis[i])ans++;
cout<<ans;
return 0;
}
为什莫过不了
这里空空如也




有帮助,赞一个