4 条题解

  • 0
    @ 2026-5-27 23:21:25
    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e6+10;
    int fa[N];
    int a[N];
    int find(int x){
        if(fa[x]!=x) fa[x]=find(fa[x]);
        return fa[x];
    }
    void merge(int x,int y){
        fa[find(x)]=find(y);
    }
    int main()
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            fa[i]=i;
        }
        for(int i=1;i<=n;i++){
            merge(i,a[i]);
        }
        vector<int> res(n+1);
        for(int i=1;i<=n;i++){
            res[find(i)]++;
        }
        sort(res.begin(),res.end(),greater<int>());
        int ans=0;
        ans+=res[0]+res[1];
        cout<<ans;
    }
    

    信息

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