zoukankan      html  css  js  c++  java
  • Codeforces 731C Socks 并查集

    题目:http://codeforces.com/contest/731/problem/C

    思路:并查集处理出哪几堆袜子是同一颜色的,对于每堆袜子求出出现最多颜色的次数,用这堆袜子的数目减去该值即为这堆袜子需要修改的颜色数,用同样的方法处理每堆求和即可。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int f[222222],c[222222];
     4 map<int,map<int,int> > mp;
     5 int getf(int x){
     6     if(f[x] == x)
     7         return x;
     8     else
     9         return f[x] = getf(f[x]);
    10 }
    11 void merge(int u,int v){
    12     int a = getf(u);
    13     int b = getf(v);
    14     if(a != b)
    15         f[b] = a;
    16 }
    17 int main(){
    18     int n,m,k;
    19     cin >> n >> m >> k;
    20     for(int i = 1;i<=n;i++){
    21         f[i] = i;
    22         scanf("%d",&c[i]);
    23     }
    24     int l,r;
    25     while(m--){
    26         scanf("%d%d",&l,&r);
    27         merge(l,r);
    28     }
    29     for(int i = 1;i<=n;i++){
    30         mp[getf(i)][c[i]]++;
    31     }
    32     int ans = 0;
    33     for(map<int,map<int,int> >::iterator i = mp.begin();i!=mp.end();i++){
    34         int sum = 0,mx = 0;
    35         for(map<int,int>::iterator j = i->second.begin();j!=i->second.end();j++){
    36             mx = max(mx,j->second);
    37             sum += j->second;
    38         }
    39         ans += sum-mx;
    40     }
    41     cout << ans;
    42     return 0;
    43 } 
  • 相关阅读:
    Nginx服务器环境搭建
    PostgreSQL常见问题处理方法
    Linux之awk使用
    PostgreSQL常用SQL
    用apache commons-pool2建立thrift连接池
    redis开发小结
    如何解决netty发送消息截断问题
    后端服务开发总结
    利用git reflog找回错误的重置
    TCP长链接调试利器nc
  • 原文地址:https://www.cnblogs.com/zqy123/p/5981322.html
Copyright © 2011-2022 走看看