AcWing每日一题-2022-4-21

题目链接:https://www.acwing.com/problem/content/1923/

个人链接:参考连通块中点的数量那个问题:https://www.acwing.com/problem/content/839/
用并查集来维护,用 \(res\) 来存最大的答案

点击查看代码
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 110;

int n;
int a[N],b[N];
int p[N],s[N];
int ans;
int res=-1;

int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    return p[x];
}

int main()
{
    cin>>n;
    
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++) cin>>b[i];
    for(int i=1;i<=n;i++) p[i]=i,s[i]=1;
    
    for(int i=0;i<n;i++)
    {
        int pa=find(a[i]),pb=find(b[i]);
        if(pa!=pb)
        {
            s[pa]+=s[pb];
            p[pb]=pa;
        }
    }
    
    for(int i=0;i<n;i++)
    {
        if(a[i]==find(a[i]) && a[i]!=b[i])
        {
            ans++;
            res=max(res,s[a[i]]);
        }
    }
    
    cout<<ans<<" "<<res<<endl;
    
    return 0;
}


posted @ 2022-04-21 23:05  黑VS白-清墨  阅读(26)  评论(0)    收藏  举报