39 lines
		
	
	
		
			686 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			686 B
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <iostream>
 | 
						|
#include <queue>
 | 
						|
const int MAX_N{int(1e5+5)};
 | 
						|
 | 
						|
int in_degree[MAX_N]{},n,next[MAX_N];
 | 
						|
std::queue<int> q;
 | 
						|
 | 
						|
void find(int num){
 | 
						|
    
 | 
						|
}
 | 
						|
 | 
						|
int main(){
 | 
						|
    std::cin>>n;
 | 
						|
    for(int i=1;i<=n;i++){
 | 
						|
        int input;
 | 
						|
        std::cin>>input;
 | 
						|
        in_degree[input]++;
 | 
						|
        next[i]=input;
 | 
						|
    }
 | 
						|
    int cnt{};
 | 
						|
    for(int i=1;i<=n;i++){
 | 
						|
        if(in_degree[i]==0){
 | 
						|
            q.push(i);
 | 
						|
            cnt++;
 | 
						|
        }
 | 
						|
    }
 | 
						|
    
 | 
						|
    while(q.empty()==false){
 | 
						|
        int top = q.front();
 | 
						|
        in_degree[next[top]]--;
 | 
						|
        q.pop();
 | 
						|
        if(in_degree[next[top]]==0){
 | 
						|
            q.push(next[top]);
 | 
						|
            cnt++;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    std::cout<<(n-cnt)<<"\n";
 | 
						|
} |