并查集【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相关推荐
- 【CodeForces - 731C】Socks(并查集,思维)
题干: Arseniy is already grown-up and independent. His mother decided to leave him alone for m days an ...
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...
- HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集
题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...
- HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法
tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...
- POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树
一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...
- 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用
二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...
- 【BZOJ1015】【JSOI2008】星球大战 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...
- 并查集 HDOJ 1232 畅通工程
题目传送门 1 /* 2 并查集(Union-Find)裸题 3 并查集三个函数:初始化Init,寻找根节点Find,连通Union 4 考察:连通边数问题 5 */ 6 #include <c ...
- 1013 Battle Over Cities(并查集解法)
关于背景的介绍见1013 Battle Over Cities(图的DFS解法) DFS就是不算特定结点后数连通子图的总数,再减一.我想着那么并查集就是数不算特定节点后,集合元素(根)的个数.但是我弄 ...
最新文章
- mysql配置_Mysql配置 max_allowed_packet
- Rootkit之SSDT hook(通过CR0)
- 【连载】优秀程序员的45个习惯之45——及时通报进展与问题
- 美国独步世界的八大领域
- 秒杀多线程第六篇 经典线程同步 事件Event
- ArrayBlockingQueue原理分析-itrs.elementDequeued()
- Scala入门到精通——第九节 继承与组合
- python 异步执行多个函数_Python的asyncio模块写多个异步的执行顺序和影响?
- C语言int的字节数跟什么有关,C语言中int型字长和什么有关
- grubbs准则 matlab_MATLAB-格拉布斯准则(MATLAB-Grubbs criterion)_0
- OC、OD、线或线与逻辑
- 希尔伯特变换(1)-基础理论
- Expandable TabBar
- 英语语音篇 - 自然拼读大全
- 2019UNCTF-竞技赛 部分WP
- 使用Java制作一个简易的远控终端
- 何时“大庇天下寒士俱欢颜”(附笑话)
- mac上Latex的安装及使用教程
- 绕任一向量旋转矩阵计算思考与实现
- Oscar-实验过程记录
热门文章
- 上网课的心得体会1000字_【家庭教育】家庭教育心得体会 ——济南市罗而小学家庭教育“好家风好家教”专栏(十一)...
- android crop 大图,Android-CropView
- python控制excel宏复制,将列从一个excel复制到另一个excel并从python运行宏
- java string字节数组_java(基本类型或者String字符串)与(字节数组)相互转换
- 如何debug函数_如何使用 pdb 来性感 debug 你的 Python 代码?
- Linux 利用nginx源码编译安装nginx
- python3.7保存_python3.7爬取墨菲定律保存在本地txt
- Flink 广播变量
- neo4j CQL语句
- apache AH01630: client denied by server configuration错误解决方法