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 register using 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);
}

并查集【CF731C】Socks的更多相关文章

  1. CF731C Socks并查集(森林),连边,贪心,森林遍历方式,动态开点释放内存

    http://codeforces.com/problemset/problem/731/C 这个题的题意是..小明的妈妈给小明留下了n只袜子,给你一个大小为n的颜色序列c 代表第i只袜子的颜色,小明 ...

  2. CodeForces 731C C - Socks 并查集

    Description Arseniy is already grown-up and independent. His mother decided to leave him alone for m ...

  3. Codeforces 731C Socks 并查集

    题目:http://codeforces.com/contest/731/problem/C 思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为 ...

  4. Codeforces 731C:Socks(并查集)

    http://codeforces.com/problemset/problem/731/C 题意:有n只袜子,m天,k个颜色,每个袜子有一个颜色,再给出m天,每天有两只袜子,每只袜子可能不同颜色,问 ...

  5. Codeforces Round #376 (Div. 2) C. Socks —— 并查集 + 贪心

    题目链接:http://codeforces.com/contest/731/problem/C 题解: 1.看题目时,大概知道,不同的袜子会因为要在同一天穿而差生了关联(或者叫相互制约), 其中一条 ...

  6. CodeForces 731C Socks (DFS或并查集)

    题意:有n只袜子,k种颜色,在m天中,问最少修改几只袜子的颜色,可以使每天穿的袜子左右两只都同颜色. 析:很明显,每个连通块都必须是同一种颜色,然后再统计最多颜色的就好了,即可以用并查集也可以用DFS ...

  7. CodeForces731-C.Socks-并查集

    C. Socks time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  8. Codeforces 731 C.Socks-并查集+STL(vector+map)

      C. Socks   time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  9. codeforces_731C_[dfs][并查集]

    C. Socks time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

随机推荐

  1. [洛谷P2590][ZJOI2008]树的统计

    题目大意:一棵树,支持三个操作, $CHANGE\;u\;t:$ 把结点$u$的权值改为$t$ $QMAX\;u\;v:$ 询问从点$u$到点$v$的路径上的节点的最大权值 $QSUM\;u\;v:$ ...

  2. 如何用setInterval调用类的方法

    setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式.setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭.由 se ...

  3. CentOS 64位上编译 Hadoop2.6.0

    由于hadoop-2.6.0.tar.gz安装包是在32位机器上编译的,64位的机器加载本地库.so文件时会出错,比如: java.lang.UnsatisfiedLinkError: org.apa ...

  4. POJ 1064---二分搜索法

    ///2.假定一个解并判断是否可行 ///POJ1064 /** Q:有N条绳子,长度分别为Li,从中切割出k条长度相同的绳子, 这K条绳子最长能有多长?保留两位小数 A: 二分搜索模型. 条件C(x ...

  5. bzoj4886 [Lydsy2017年5月月赛]叠塔游戏

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4886 [题解] 跟bzoj4883:http://www.cnblogs.com/galax ...

  6. bzoj 1041 数学推理

    原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1041 我们只需要求第一象限内(不包括坐标轴)的点数然后ans=ans*4+4就好了 首先我 ...

  7. python-自定义分页组件

    使用方法 """ 自定义分页组件的使用方法: pager_obj = Pagination(request.GET.get('page',1),len(HOST_LIST ...

  8. 网络知识===cookie 、session、JSESSIONID的区别

    cookie .session ? 让我们用几个例子来描述一下cookie和session机制之间的区别与联系.笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微 ...

  9. easyui获取当前选中的tabs

    $("#" + $("#tabs").find("iframe")[$(".tabs-header ul li").in ...

  10. mysql 单列索引限制

    innodb_large_prefix. 这个参数默认值是OFF.当改为ON时,允许列索引最大达到3072. >=5.7.7默认打开 <=5.7.6默认关闭 innodb_large_pr ...