日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

并查集【CF731C】Socks

發布時間:2024/9/5 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 并查集【CF731C】Socks 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

\(n\)只襪子,\(k\)種顏色,在\(m\)天中,問最少修改幾只襪子的顏色,可以使每天要穿的襪子顏色相同。

Input

第一行\(n,m,k\)分別對應題目描述。

接下來\(m\)行每行兩個整數\(l_i,r_i\)表示第\(i\)天要穿的兩只襪子的編號。

Output

一個整數,代表最小要修改幾只襪子的顏色。

首先,對于每一天要穿的襪子,我們加入同一個并查集。(這個很明顯吧)

如果有一只襪子需要被穿多次的話,

顯然我們會將其染成當前聯通塊中包含襪子最多的一種顏色。

我們用\(vector\)維護每個聯通塊中的襪子的顏色。

再開\(vis\)數組維護每種襪子的出現次數。(注意要清空)

每次我們累加的答案就是\(size-mx\)

其中\(size\)為聯通塊大小,\(mx\)為顏色相同的最多的襪子的個數。

代碼

#include<cstdio> #include<algorithm> #include<vector> #include<iostream> #define R registerusing namespace std;const int gz=200001;inline void in(R int &x) {int f=1;x=0;char s=getchar();while(!isdigit(s)){if(s=='-')f=-1;s=getchar();}while(isdigit(s)){x=x*10+s-'0';s=getchar();}x*=f; }vector<int>v[gz];int col[gz],f[gz],n,m,k,ans,vis[gz];int find(R int x){return f[x]==x?x:f[x]=find(f[x]);}signed main() {in(n),in(m),in(k);for(R int i=1;i<=n;i++)in(col[i]),f[i]=i;for(R int i=1,x,y;i<=m;i++){in(x),in(y);R int fa=find(x),fb=find(y);if(fa==fb)continue;f[fa]=fb;}for(R int i=1;i<=n;i++){R int fa=find(i);v[fa].push_back(col[i]);}for(R int i=1;i<=n;i++){R int tmp=v[i].size();R int mx=0;if(tmp>1){for(R int j=0;j<tmp;j++){vis[v[i][j]]++;mx=max(mx,vis[v[i][j]]);}for(R int j=0;j<tmp;j++)vis[v[i][j]]--;ans+=tmp-mx;}}printf("%d",ans); }

轉載于:https://www.cnblogs.com/-guz/p/9909338.html

總結

以上是生活随笔為你收集整理的并查集【CF731C】Socks的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。