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;
}