4 条题解

  • 0
    @ 2026-5-30 9:53:12
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e6+10;
    int n;
    int fa[N];
    int a[N];
    int find(int x){
    	return fa[x]==x ? x : fa[x] = find(fa[x]) ;
    }
    void unite(int x,int y){
    	fa[find(y)] = find(x);
    }
    
    
    int main(){
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    		fa[i]=i;
    	}
    	for(int i=1;i<=n;i++){
    		unite(i,a[i]);
    	}
    	
    	vector<int> size(n+1,0);
    	
    	for(int i=1;i<=n;i++){
    		size[find(i)]++;
    	}
    	
    	int ans = 0;
    	for(int i=1;i<=n;i++){
    		ans = max(ans,size[i]);
    	}
    	
    	for(int i=1;i<=n-1;i++){
    		int r1 = find(i);
    		int r2 = find(i+1);
    		if(r1!=r2){
    			ans = max(ans,size[r1]+size[r2]);
    		}
    	}
    	cout<<ans;
    	return 0;
    } 
    

    信息

    ID
    608
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    428
    已通过
    139
    上传者