タイトル説明
Avaのあるファンタジーの世界に冬がやってくる!Avaはかわいい子猫です。彼女はこの冬にたくさんの手袋を購入しました。AkatheRabbitは長い休止キャンプを組織し、Avaに参加を呼びかけました。Avaは毎日異なる手袋を着用する予定です。アッカラビットが開催する休止キャンプには合計T日間あり、毎朝早起きして手袋を選びます。彼女は合計n個の手袋を持っており、それぞれが互いに異なりますが、メインカラーはCiです。異なる手袋の色は同じである可能性があります。Avaは、毎日n個の手袋から2個を選びます。彼女は、色の異なる手袋は手に馴染みにくいと感じているため、休止キャンプの開始前にAkaに助けを求めることができます。一部の手袋を他の色でペイントしますが、休止キャンプが開始されると、n個の手袋の色を変更できないことに注意してください。休止キャンプが始まる前に、アヴァは毎日2枚の手袋を着用する計画を立てていましたが、少なくとも手袋の色を変更して、アヴァの計画に従って手袋を着用する場合は、毎日2枚の手袋を着用するように指示する必要があります。すべての手袋は同じ色です
最初の行、整数nを入力します。これは、Avaの手袋の数を表します。
2行目のn個の整数で、i番目の数値Ciはi番目のグローブの初期色を表します。
3行目の整数Tは、Akkaが開催した休止キャンプの日数を表します。
次に、T行があり、それぞれに2つの整数i、jがあります。それぞれ、Avaがこの日に選んだ2つの手袋の数を示しています。
出力は
、少なくとも変更が必要な手袋の色の数を示す線、整数です。
サンプル入力
5
2 2 2 2 1
4
2 4
5 3
4 3
5 2
サンプル出力
1
そして、入力手袋を確認し、サイクルを繰り返して父親を更新し、それを配列に保存します。各ファミリの異なる色の数、同じ色の大部分は変更せずにそのままにして、合計数から同じ数を引くことができます。色を変更することです
#include<bits/stdc++.h>
using namespace std;
int fa[150000];
int n,a[150000],ans;
map<int ,int>q[150000],p,pp;
int m;
int getfa(int x)//找爸爸
{
if(fa[x]==x)return x;
return fa[x]=getfa(fa[x]);
}
int main()
{
cin>>n;int sum=n;
for(int i=1;i<=n;i++)fa[i]=i;
for(int i=1;i<=n;i++)cin>>a[i],pp[i]=a[i];
cin>>m;
for(int i=1;i<=m;i++)
{
int x,y;cin>>x>>y;
int xx=getfa(x);
int yy=getfa(y);
if(xx!=yy)fa[xx]=yy;
}
for(int i=1;i<=n;i++)getfa(i);//更新祖先
/* for(int i=1;i<=n;i++)cout<<fa[i]<<' ';
cout<<endl;*/
for(int i=1;i<=n;i++)
{
q[fa[i]][a[i]]++;
if(q[fa[i]][a[i]]>p[fa[i]])p[fa[i]]=q[fa[i]][a[i]];//如果这种颜色更多,更新
}
for(int i=1;i<=n;i++)if(fa[i]==i)sum-=p[fa[i]];//同种颜色不用变
cout<<sum;
return 0;
}