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相关推荐

  1. 【CodeForces - 731C】Socks(并查集,思维)

    题干: Arseniy is already grown-up and independent. His mother decided to leave him alone for m days an ...

  2. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  3. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  4. HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法

    tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...

  5. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  6. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  7. 【BZOJ1015】【JSOI2008】星球大战 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...

  8. 并查集 HDOJ 1232 畅通工程

    题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...

  9. 1013 Battle Over Cities(并查集解法)

    关于背景的介绍见1013 Battle Over Cities(图的DFS解法) DFS就是不算特定结点后数连通子图的总数,再减一.我想着那么并查集就是数不算特定节点后,集合元素(根)的个数.但是我弄 ...

最新文章

  1. mysql配置_Mysql配置 max_allowed_packet
  2. Rootkit之SSDT hook(通过CR0)
  3. 【连载】优秀程序员的45个习惯之45——及时通报进展与问题
  4. 美国独步世界的八大领域
  5. 秒杀多线程第六篇 经典线程同步 事件Event
  6. ArrayBlockingQueue原理分析-itrs.elementDequeued()
  7. Scala入门到精通——第九节 继承与组合
  8. python 异步执行多个函数_Python的asyncio模块写多个异步的执行顺序和影响?
  9. C语言int的字节数跟什么有关,C语言中int型字长和什么有关
  10. grubbs准则 matlab_MATLAB-格拉布斯准则(MATLAB-Grubbs criterion)_0
  11. OC、OD、线或线与逻辑
  12. 希尔伯特变换(1)-基础理论
  13. Expandable TabBar
  14. 英语语音篇 - 自然拼读大全
  15. 2019UNCTF-竞技赛 部分WP
  16. 使用Java制作一个简易的远控终端
  17. 何时“大庇天下寒士俱欢颜”(附笑话)
  18. mac上Latex的安装及使用教程
  19. 绕任一向量旋转矩阵计算思考与实现
  20. Oscar-实验过程记录

热门文章

  1. 上网课的心得体会1000字_【家庭教育】家庭教育心得体会 ——济南市罗而小学家庭教育“好家风好家教”专栏(十一)...
  2. android crop 大图,Android-CropView
  3. python控制excel宏复制,将列从一个excel复制到另一个excel并从python运行宏
  4. java string字节数组_java(基本类型或者String字符串)与(字节数组)相互转换
  5. 如何debug函数_如何使用 pdb 来性感 debug 你的 Python 代码?
  6. Linux 利用nginx源码编译安装nginx
  7. python3.7保存_python3.7爬取墨菲定律保存在本地txt
  8. Flink 广播变量
  9. neo4j CQL语句
  10. apache AH01630: client denied by server configuration错误解决方法