贪心+并查集即可.选取集合众数,然后答案就是集合大小-集合众数了.

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int a[N];
int fa[N];
vector<int>v[N];
int f(int x)
{
    if(x==fa[x]) return fa[x]=x;
    else         return fa[x]=f(fa[x]);
}
int main()
{
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++) fa[i]=i;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        if(f(x)!=f(y)) fa[f(x)]=f(y);
    }
    for(int i=1;i<=n;i++)
    {
        v[f(i)].push_back(i);
    }
    map<int,int>p;
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        if(v[i].size()>1)
        {
            int cnt=0;
            for(int j=0;j<v[i].size();j++)
            {
                p[a[v[i][j]]]++;
                cnt=max(cnt,p[a[v[i][j]]]);
            }
            p.clear();
            ans+=v[i].size()-cnt;
        }
    }
    printf("%d\n",ans);
    return 0;
}
/*
3 3 3
1 2 3
1 2
2 3
3 1
*/